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 24d1a31145 [GH-2678] Add SVG visuals for geometry editor functions 
(Phase 5) (#2686)
24d1a31145 is described below

commit 24d1a31145e850df4cf33f082dc7291812563d01
Author: Jia Yu <[email protected]>
AuthorDate: Wed Mar 4 16:21:22 2026 -0700

    [GH-2678] Add SVG visuals for geometry editor functions (Phase 5) (#2686)
---
 docs/api/flink/Geometry-Editors/ST_AddPoint.md     |  2 ++
 docs/api/flink/Geometry-Editors/ST_Collect.md      |  2 ++
 .../flink/Geometry-Editors/ST_CollectionExtract.md |  2 ++
 .../flink/Geometry-Editors/ST_FlipCoordinates.md   |  2 ++
 docs/api/flink/Geometry-Editors/ST_Force2D.md      |  2 ++
 docs/api/flink/Geometry-Editors/ST_Force3D.md      |  2 ++
 docs/api/flink/Geometry-Editors/ST_Force3DM.md     |  2 ++
 docs/api/flink/Geometry-Editors/ST_Force3DZ.md     |  2 ++
 docs/api/flink/Geometry-Editors/ST_Force4D.md      |  2 ++
 .../flink/Geometry-Editors/ST_ForceCollection.md   |  2 ++
 .../flink/Geometry-Editors/ST_ForcePolygonCCW.md   |  2 ++
 .../flink/Geometry-Editors/ST_ForcePolygonCW.md    |  2 ++
 docs/api/flink/Geometry-Editors/ST_ForceRHR.md     |  2 ++
 docs/api/flink/Geometry-Editors/ST_Force_2D.md     |  2 ++
 .../Geometry-Editors/ST_LineFromMultiPoint.md      |  2 ++
 docs/api/flink/Geometry-Editors/ST_LineMerge.md    |  2 ++
 docs/api/flink/Geometry-Editors/ST_LineSegments.md |  2 ++
 docs/api/flink/Geometry-Editors/ST_MakeLine.md     |  2 ++
 docs/api/flink/Geometry-Editors/ST_MakePolygon.md  |  2 ++
 docs/api/flink/Geometry-Editors/ST_Multi.md        |  2 ++
 docs/api/flink/Geometry-Editors/ST_Normalize.md    |  2 ++
 docs/api/flink/Geometry-Editors/ST_Polygon.md      |  2 ++
 docs/api/flink/Geometry-Editors/ST_Project.md      |  2 ++
 docs/api/flink/Geometry-Editors/ST_RemovePoint.md  |  2 ++
 .../Geometry-Editors/ST_RemoveRepeatedPoints.md    |  2 ++
 docs/api/flink/Geometry-Editors/ST_Reverse.md      |  2 ++
 docs/api/flink/Geometry-Editors/ST_Segmentize.md   |  2 ++
 docs/api/flink/Geometry-Editors/ST_SetPoint.md     |  2 ++
 .../flink/Geometry-Editors/ST_ShiftLongitude.md    |  2 ++
 .../vector-data/Geometry-Editors/ST_AddPoint.md    |  2 ++
 .../vector-data/Geometry-Editors/ST_Collect.md     |  2 ++
 .../Geometry-Editors/ST_CollectionExtract.md       |  2 ++
 .../Geometry-Editors/ST_FlipCoordinates.md         |  2 ++
 .../vector-data/Geometry-Editors/ST_Force2D.md     |  2 ++
 .../vector-data/Geometry-Editors/ST_Force3D.md     |  2 ++
 .../vector-data/Geometry-Editors/ST_Force3DZ.md    |  2 ++
 .../Geometry-Editors/ST_ForceCollection.md         |  2 ++
 .../Geometry-Editors/ST_ForcePolygonCCW.md         |  2 ++
 .../Geometry-Editors/ST_ForcePolygonCW.md          |  2 ++
 .../vector-data/Geometry-Editors/ST_ForceRHR.md    |  2 ++
 .../vector-data/Geometry-Editors/ST_Force_2D.md    |  2 ++
 .../Geometry-Editors/ST_LineFromMultiPoint.md      |  2 ++
 .../vector-data/Geometry-Editors/ST_LineMerge.md   |  2 ++
 .../vector-data/Geometry-Editors/ST_MakeLine.md    |  2 ++
 .../vector-data/Geometry-Editors/ST_MakePolygon.md |  2 ++
 .../vector-data/Geometry-Editors/ST_Multi.md       |  2 ++
 .../vector-data/Geometry-Editors/ST_Normalize.md   |  2 ++
 .../vector-data/Geometry-Editors/ST_Polygon.md     |  2 ++
 .../vector-data/Geometry-Editors/ST_Project.md     |  2 ++
 .../vector-data/Geometry-Editors/ST_RemovePoint.md |  2 ++
 .../Geometry-Editors/ST_RemoveRepeatedPoints.md    |  2 ++
 .../vector-data/Geometry-Editors/ST_Reverse.md     |  2 ++
 .../vector-data/Geometry-Editors/ST_Segmentize.md  |  2 ++
 .../vector-data/Geometry-Editors/ST_SetPoint.md    |  2 ++
 .../Geometry-Editors/ST_ShiftLongitude.md          |  2 ++
 docs/api/sql/Geometry-Editors/ST_AddPoint.md       |  2 ++
 docs/api/sql/Geometry-Editors/ST_Collect.md        |  2 ++
 .../sql/Geometry-Editors/ST_CollectionExtract.md   |  2 ++
 .../api/sql/Geometry-Editors/ST_FlipCoordinates.md |  2 ++
 docs/api/sql/Geometry-Editors/ST_Force2D.md        |  2 ++
 docs/api/sql/Geometry-Editors/ST_Force3D.md        |  2 ++
 docs/api/sql/Geometry-Editors/ST_Force3DM.md       |  2 ++
 docs/api/sql/Geometry-Editors/ST_Force3DZ.md       |  2 ++
 docs/api/sql/Geometry-Editors/ST_Force4D.md        |  2 ++
 .../api/sql/Geometry-Editors/ST_ForceCollection.md |  2 ++
 .../api/sql/Geometry-Editors/ST_ForcePolygonCCW.md |  2 ++
 docs/api/sql/Geometry-Editors/ST_ForcePolygonCW.md |  2 ++
 docs/api/sql/Geometry-Editors/ST_ForceRHR.md       |  2 ++
 docs/api/sql/Geometry-Editors/ST_Force_2D.md       |  2 ++
 .../sql/Geometry-Editors/ST_LineFromMultiPoint.md  |  2 ++
 docs/api/sql/Geometry-Editors/ST_LineMerge.md      |  2 ++
 docs/api/sql/Geometry-Editors/ST_LineSegments.md   |  2 ++
 docs/api/sql/Geometry-Editors/ST_MakeLine.md       |  2 ++
 docs/api/sql/Geometry-Editors/ST_MakePolygon.md    |  2 ++
 docs/api/sql/Geometry-Editors/ST_Multi.md          |  2 ++
 docs/api/sql/Geometry-Editors/ST_Normalize.md      |  2 ++
 docs/api/sql/Geometry-Editors/ST_Polygon.md        |  2 ++
 docs/api/sql/Geometry-Editors/ST_Project.md        |  2 ++
 docs/api/sql/Geometry-Editors/ST_RemovePoint.md    |  2 ++
 .../Geometry-Editors/ST_RemoveRepeatedPoints.md    |  2 ++
 docs/api/sql/Geometry-Editors/ST_Reverse.md        |  2 ++
 docs/api/sql/Geometry-Editors/ST_Segmentize.md     |  2 ++
 docs/api/sql/Geometry-Editors/ST_SetPoint.md       |  2 ++
 docs/api/sql/Geometry-Editors/ST_ShiftLongitude.md |  2 ++
 docs/image/ST_AddPoint/ST_AddPoint.svg             | 36 ++++++++++++++++++++
 docs/image/ST_Collect/ST_Collect.svg               | 27 +++++++++++++++
 .../ST_CollectionExtract/ST_CollectionExtract.svg  | 28 ++++++++++++++++
 .../ST_FlipCoordinates/ST_FlipCoordinates.svg      | 31 +++++++++++++++++
 docs/image/ST_Force2D/ST_Force2D.svg               | 27 +++++++++++++++
 docs/image/ST_Force3D/ST_Force3D.svg               | 27 +++++++++++++++
 docs/image/ST_Force3DM/ST_Force3DM.svg             | 27 +++++++++++++++
 docs/image/ST_Force3DZ/ST_Force3DZ.svg             | 27 +++++++++++++++
 docs/image/ST_Force4D/ST_Force4D.svg               | 27 +++++++++++++++
 .../ST_ForceCollection/ST_ForceCollection.svg      | 26 +++++++++++++++
 .../ST_ForcePolygonCCW/ST_ForcePolygonCCW.svg      | 26 +++++++++++++++
 docs/image/ST_ForcePolygonCW/ST_ForcePolygonCW.svg | 26 +++++++++++++++
 docs/image/ST_ForceRHR/ST_ForceRHR.svg             | 26 +++++++++++++++
 docs/image/ST_Force_2D/ST_Force_2D.svg             | 27 +++++++++++++++
 .../ST_LineFromMultiPoint.svg                      | 31 +++++++++++++++++
 docs/image/ST_LineMerge/ST_LineMerge.svg           | 36 ++++++++++++++++++++
 docs/image/ST_LineSegments/ST_LineSegments.svg     | 39 ++++++++++++++++++++++
 docs/image/ST_MakeLine/ST_MakeLine.svg             | 31 +++++++++++++++++
 docs/image/ST_MakePolygon/ST_MakePolygon.svg       | 29 ++++++++++++++++
 docs/image/ST_Multi/ST_Multi.svg                   | 22 ++++++++++++
 docs/image/ST_Normalize/ST_Normalize.svg           | 24 +++++++++++++
 docs/image/ST_Polygon/ST_Polygon.svg               | 29 ++++++++++++++++
 docs/image/ST_Project/ST_Project.svg               | 37 ++++++++++++++++++++
 docs/image/ST_RemovePoint/ST_RemovePoint.svg       | 38 +++++++++++++++++++++
 .../ST_RemoveRepeatedPoints.svg                    | 39 ++++++++++++++++++++++
 docs/image/ST_Reverse/ST_Reverse.svg               | 38 +++++++++++++++++++++
 docs/image/ST_Segmentize/ST_Segmentize.svg         | 37 ++++++++++++++++++++
 docs/image/ST_SetPoint/ST_SetPoint.svg             | 37 ++++++++++++++++++++
 docs/image/ST_ShiftLongitude/ST_ShiftLongitude.svg | 38 +++++++++++++++++++++
 113 files changed, 1061 insertions(+)

diff --git a/docs/api/flink/Geometry-Editors/ST_AddPoint.md 
b/docs/api/flink/Geometry-Editors/ST_AddPoint.md
index 86f35d3ae4..dc4bcfe1d0 100644
--- a/docs/api/flink/Geometry-Editors/ST_AddPoint.md
+++ b/docs/api/flink/Geometry-Editors/ST_AddPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Return Linestring with additional point at the given index, if 
position is not available the point will be added at the end of line.
 
+![ST_AddPoint](../../../image/ST_AddPoint/ST_AddPoint.svg "ST_AddPoint")
+
 Format:
 
 `ST_AddPoint(geom: Geometry, point: Geometry, position: Integer)`
diff --git a/docs/api/flink/Geometry-Editors/ST_Collect.md 
b/docs/api/flink/Geometry-Editors/ST_Collect.md
index 012c1ae28b..5d15e1edc1 100644
--- a/docs/api/flink/Geometry-Editors/ST_Collect.md
+++ b/docs/api/flink/Geometry-Editors/ST_Collect.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns MultiGeometry object based on geometry column/s or array 
with geometries
 
+![ST_Collect](../../../image/ST_Collect/ST_Collect.svg "ST_Collect")
+
 Format:
 
 `ST_Collect(*geom: Geometry)`
diff --git a/docs/api/flink/Geometry-Editors/ST_CollectionExtract.md 
b/docs/api/flink/Geometry-Editors/ST_CollectionExtract.md
index 52299518c1..8574476c90 100644
--- a/docs/api/flink/Geometry-Editors/ST_CollectionExtract.md
+++ b/docs/api/flink/Geometry-Editors/ST_CollectionExtract.md
@@ -29,6 +29,8 @@ The type numbers are:
 
 If the type parameter is omitted a multi-geometry of the highest dimension is 
returned.
 
+![ST_CollectionExtract](../../../image/ST_CollectionExtract/ST_CollectionExtract.svg
 "ST_CollectionExtract")
+
 Format:
 
 `ST_CollectionExtract (A: Geometry)`
diff --git a/docs/api/flink/Geometry-Editors/ST_FlipCoordinates.md 
b/docs/api/flink/Geometry-Editors/ST_FlipCoordinates.md
index d018ca68a9..9a35175113 100644
--- a/docs/api/flink/Geometry-Editors/ST_FlipCoordinates.md
+++ b/docs/api/flink/Geometry-Editors/ST_FlipCoordinates.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a version of the given geometry with X and Y axis 
flipped.
 
+![ST_FlipCoordinates](../../../image/ST_FlipCoordinates/ST_FlipCoordinates.svg 
"ST_FlipCoordinates")
+
 Format: `ST_FlipCoordinates(A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Force2D.md 
b/docs/api/flink/Geometry-Editors/ST_Force2D.md
index 775ad4871c..fbfbf7cac1 100644
--- a/docs/api/flink/Geometry-Editors/ST_Force2D.md
+++ b/docs/api/flink/Geometry-Editors/ST_Force2D.md
@@ -21,6 +21,8 @@
 
 Introduction: Forces the geometries into a "2-dimensional mode" so that all 
output representations will only have the X and Y coordinates. This function is 
an alias of [ST_Force_2D](ST_Force_2D.md).
 
+![ST_Force2D](../../../image/ST_Force2D/ST_Force2D.svg "ST_Force2D")
+
 Format: `ST_Force2D (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Force3D.md 
b/docs/api/flink/Geometry-Editors/ST_Force3D.md
index 73fe256197..746a46711e 100644
--- a/docs/api/flink/Geometry-Editors/ST_Force3D.md
+++ b/docs/api/flink/Geometry-Editors/ST_Force3D.md
@@ -27,6 +27,8 @@ If the given geometry is empty, no change is performed on it.
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force3D](../../../image/ST_Force3D/ST_Force3D.svg "ST_Force3D")
+
 Format: `ST_Force3D(geometry: Geometry, zValue: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Force3DM.md 
b/docs/api/flink/Geometry-Editors/ST_Force3DM.md
index f0afc33b0d..3c0cc20ab2 100644
--- a/docs/api/flink/Geometry-Editors/ST_Force3DM.md
+++ b/docs/api/flink/Geometry-Editors/ST_Force3DM.md
@@ -24,6 +24,8 @@ Introduction: Forces the geometry into XYM mode. Retains any 
existing M coordina
 !!!Note
 Example output is after calling ST_AsText() on returned geometry, which adds M 
for in the WKT.
 
+![ST_Force3DM](../../../image/ST_Force3DM/ST_Force3DM.svg "ST_Force3DM")
+
 Format: `ST_Force3DM(geometry: Geometry, mValue: Double = 0.0)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Force3DZ.md 
b/docs/api/flink/Geometry-Editors/ST_Force3DZ.md
index cf361707b2..8d35600878 100644
--- a/docs/api/flink/Geometry-Editors/ST_Force3DZ.md
+++ b/docs/api/flink/Geometry-Editors/ST_Force3DZ.md
@@ -27,6 +27,8 @@ If the given geometry is empty, no change is performed on it. 
This function is a
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force3DZ](../../../image/ST_Force3DZ/ST_Force3DZ.svg "ST_Force3DZ")
+
 Format: `ST_Force3DZ(geometry: Geometry, zValue: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Force4D.md 
b/docs/api/flink/Geometry-Editors/ST_Force4D.md
index 7483bd00e7..1804936530 100644
--- a/docs/api/flink/Geometry-Editors/ST_Force4D.md
+++ b/docs/api/flink/Geometry-Editors/ST_Force4D.md
@@ -24,6 +24,8 @@ Introduction: Converts the input geometry to 4D XYZM 
representation. Retains ori
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force4D](../../../image/ST_Force4D/ST_Force4D.svg "ST_Force4D")
+
 Format:
 
 `ST_Force4D(geom: Geometry, zValue: Double, mValue: Double)`
diff --git a/docs/api/flink/Geometry-Editors/ST_ForceCollection.md 
b/docs/api/flink/Geometry-Editors/ST_ForceCollection.md
index d9a7820b49..b5a62b6bea 100644
--- a/docs/api/flink/Geometry-Editors/ST_ForceCollection.md
+++ b/docs/api/flink/Geometry-Editors/ST_ForceCollection.md
@@ -21,6 +21,8 @@
 
 Introduction: This function converts the input geometry into a 
GeometryCollection, regardless of the original geometry type. If the input is a 
multipart geometry, such as a MultiPolygon or MultiLineString, it will be 
decomposed into a GeometryCollection containing each individual Polygon or 
LineString element from the original multipart geometry.
 
+![ST_ForceCollection](../../../image/ST_ForceCollection/ST_ForceCollection.svg 
"ST_ForceCollection")
+
 Format: `ST_ForceCollection(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_ForcePolygonCCW.md 
b/docs/api/flink/Geometry-Editors/ST_ForcePolygonCCW.md
index 3ed3d441bc..4d2eae510d 100644
--- a/docs/api/flink/Geometry-Editors/ST_ForcePolygonCCW.md
+++ b/docs/api/flink/Geometry-Editors/ST_ForcePolygonCCW.md
@@ -21,6 +21,8 @@
 
 Introduction: For (Multi)Polygon geometries, this function sets the exterior 
ring orientation to counter-clockwise and interior rings to clockwise 
orientation. Non-polygonal geometries are returned unchanged.
 
+![ST_ForcePolygonCCW](../../../image/ST_ForcePolygonCCW/ST_ForcePolygonCCW.svg 
"ST_ForcePolygonCCW")
+
 Format: `ST_ForcePolygonCCW(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_ForcePolygonCW.md 
b/docs/api/flink/Geometry-Editors/ST_ForcePolygonCW.md
index 639fe20e44..2737e9d3ea 100644
--- a/docs/api/flink/Geometry-Editors/ST_ForcePolygonCW.md
+++ b/docs/api/flink/Geometry-Editors/ST_ForcePolygonCW.md
@@ -21,6 +21,8 @@
 
 Introduction: For (Multi)Polygon geometries, this function sets the exterior 
ring orientation to clockwise and interior rings to counter-clockwise 
orientation. Non-polygonal geometries are returned unchanged.
 
+![ST_ForcePolygonCW](../../../image/ST_ForcePolygonCW/ST_ForcePolygonCW.svg 
"ST_ForcePolygonCW")
+
 Format: `ST_ForcePolygonCW(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_ForceRHR.md 
b/docs/api/flink/Geometry-Editors/ST_ForceRHR.md
index e91bfe953b..0056ba405d 100644
--- a/docs/api/flink/Geometry-Editors/ST_ForceRHR.md
+++ b/docs/api/flink/Geometry-Editors/ST_ForceRHR.md
@@ -21,6 +21,8 @@
 
 Introduction: Sets the orientation of polygon vertex orderings to follow the 
Right-Hand-Rule convention. The exterior ring will have a clockwise winding 
order, while any interior rings are oriented counter-clockwise. This ensures 
the area bounded by the polygon falls on the right-hand side relative to the 
ring directions. The function is an alias for 
[ST_ForcePolygonCW](ST_ForcePolygonCW.md).
 
+![ST_ForceRHR](../../../image/ST_ForceRHR/ST_ForceRHR.svg "ST_ForceRHR")
+
 Format: `ST_ForceRHR(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Force_2D.md 
b/docs/api/flink/Geometry-Editors/ST_Force_2D.md
index 227b5c276f..b93c9e487a 100644
--- a/docs/api/flink/Geometry-Editors/ST_Force_2D.md
+++ b/docs/api/flink/Geometry-Editors/ST_Force_2D.md
@@ -21,6 +21,8 @@
 
 Introduction: Forces the geometries into a "2-dimensional mode" so that all 
output representations will only have the X and Y coordinates. This function is 
an alias of [ST_Force2D](ST_Force2D.md).
 
+![ST_Force_2D](../../../image/ST_Force_2D/ST_Force_2D.svg "ST_Force_2D")
+
 Format: `ST_Force_2D (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_LineFromMultiPoint.md 
b/docs/api/flink/Geometry-Editors/ST_LineFromMultiPoint.md
index 074fe6f513..0b7f6ee8e9 100644
--- a/docs/api/flink/Geometry-Editors/ST_LineFromMultiPoint.md
+++ b/docs/api/flink/Geometry-Editors/ST_LineFromMultiPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Creates a LineString from a MultiPoint geometry.
 
+![ST_LineFromMultiPoint](../../../image/ST_LineFromMultiPoint/ST_LineFromMultiPoint.svg
 "ST_LineFromMultiPoint")
+
 Format: `ST_LineFromMultiPoint (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_LineMerge.md 
b/docs/api/flink/Geometry-Editors/ST_LineMerge.md
index 1a1a3e133b..e24084ac8d 100644
--- a/docs/api/flink/Geometry-Editors/ST_LineMerge.md
+++ b/docs/api/flink/Geometry-Editors/ST_LineMerge.md
@@ -24,6 +24,8 @@ Introduction: Returns a LineString or MultiLineString formed 
by sewing together
 !!!note
     Only works for MULTILINESTRING. Using other geometry will return a 
GEOMETRYCOLLECTION EMPTY. If no merging can be performed, the original 
MULTILINESTRING is returned.
 
+![ST_LineMerge](../../../image/ST_LineMerge/ST_LineMerge.svg "ST_LineMerge")
+
 Format: `ST_LineMerge (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_LineSegments.md 
b/docs/api/flink/Geometry-Editors/ST_LineSegments.md
index b93ffd7a91..6e03dfcc6d 100644
--- a/docs/api/flink/Geometry-Editors/ST_LineSegments.md
+++ b/docs/api/flink/Geometry-Editors/ST_LineSegments.md
@@ -21,6 +21,8 @@
 
 Introduction: This function transforms a LineString containing multiple 
coordinates into an array of LineStrings, each with precisely two coordinates. 
The `lenient` argument, true by default, prevents an exception from being 
raised if the input geometry is not a LineString.
 
+![ST_LineSegments](../../../image/ST_LineSegments/ST_LineSegments.svg 
"ST_LineSegments")
+
 Format:
 
 `ST_LineSegments(geom: Geometry, lenient: Boolean)`
diff --git a/docs/api/flink/Geometry-Editors/ST_MakeLine.md 
b/docs/api/flink/Geometry-Editors/ST_MakeLine.md
index 4f7d8db1ed..efe3b88578 100644
--- a/docs/api/flink/Geometry-Editors/ST_MakeLine.md
+++ b/docs/api/flink/Geometry-Editors/ST_MakeLine.md
@@ -21,6 +21,8 @@
 
 Introduction: Creates a LineString containing the points of Point, MultiPoint, 
or LineString geometries. Other geometry types cause an error.
 
+![ST_MakeLine](../../../image/ST_MakeLine/ST_MakeLine.svg "ST_MakeLine")
+
 Format:
 
 `ST_MakeLine(geom1: Geometry, geom2: Geometry)`
diff --git a/docs/api/flink/Geometry-Editors/ST_MakePolygon.md 
b/docs/api/flink/Geometry-Editors/ST_MakePolygon.md
index 4dc9b11027..3fa837298d 100644
--- a/docs/api/flink/Geometry-Editors/ST_MakePolygon.md
+++ b/docs/api/flink/Geometry-Editors/ST_MakePolygon.md
@@ -21,6 +21,8 @@
 
 Introduction: Function to convert closed linestring to polygon including 
holes. If holes are provided, they should be fully contained within the shell. 
Holes outside the shell will produce an invalid polygon (matching PostGIS 
behavior). Use `ST_IsValid` to check the result.
 
+![ST_MakePolygon](../../../image/ST_MakePolygon/ST_MakePolygon.svg 
"ST_MakePolygon")
+
 Format: `ST_MakePolygon(geom: Geometry, holes: ARRAY[Geometry])`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Multi.md 
b/docs/api/flink/Geometry-Editors/ST_Multi.md
index 0f39c7f728..b2e8d136b5 100644
--- a/docs/api/flink/Geometry-Editors/ST_Multi.md
+++ b/docs/api/flink/Geometry-Editors/ST_Multi.md
@@ -22,6 +22,8 @@
 Introduction: Returns a MultiGeometry object based on the geometry input.
 ST_Multi is basically an alias for ST_Collect with one geometry.
 
+![ST_Multi](../../../image/ST_Multi/ST_Multi.svg "ST_Multi")
+
 Format: `ST_Multi(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Normalize.md 
b/docs/api/flink/Geometry-Editors/ST_Normalize.md
index 4bd02c6ab8..14ca939bb5 100644
--- a/docs/api/flink/Geometry-Editors/ST_Normalize.md
+++ b/docs/api/flink/Geometry-Editors/ST_Normalize.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the input geometry in its normalized form.
 
+![ST_Normalize](../../../image/ST_Normalize/ST_Normalize.svg "ST_Normalize")
+
 Format: `ST_Normalize(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Polygon.md 
b/docs/api/flink/Geometry-Editors/ST_Polygon.md
index 71e4d68e19..766dd231c5 100644
--- a/docs/api/flink/Geometry-Editors/ST_Polygon.md
+++ b/docs/api/flink/Geometry-Editors/ST_Polygon.md
@@ -21,6 +21,8 @@
 
 Introduction: Function to create a polygon built from the given LineString and 
sets the spatial reference system from the srid
 
+![ST_Polygon](../../../image/ST_Polygon/ST_Polygon.svg "ST_Polygon")
+
 Format: `ST_Polygon(geom: Geometry, srid: Integer)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Project.md 
b/docs/api/flink/Geometry-Editors/ST_Project.md
index 41c9b4cca8..1c0fd32953 100644
--- a/docs/api/flink/Geometry-Editors/ST_Project.md
+++ b/docs/api/flink/Geometry-Editors/ST_Project.md
@@ -21,6 +21,8 @@
 
 Introduction: Calculates a new point location given a starting point, 
distance, and azimuth. The azimuth indicates the direction, expressed in 
radians, and is measured in a clockwise manner starting from true north. The 
system can handle azimuth values that are negative or exceed 2π (360 degrees). 
The optional `lenient` parameter prevents an error if the input geometry is not 
a Point. Its default value is `false`.
 
+![ST_Project](../../../image/ST_Project/ST_Project.svg "ST_Project")
+
 Format:
 
 ```
diff --git a/docs/api/flink/Geometry-Editors/ST_RemovePoint.md 
b/docs/api/flink/Geometry-Editors/ST_RemovePoint.md
index fff4b48b07..d749a28316 100644
--- a/docs/api/flink/Geometry-Editors/ST_RemovePoint.md
+++ b/docs/api/flink/Geometry-Editors/ST_RemovePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Return Linestring with removed point at given index, position 
can be omitted and then last one will be removed.
 
+![ST_RemovePoint](../../../image/ST_RemovePoint/ST_RemovePoint.svg 
"ST_RemovePoint")
+
 Format:
 
 `ST_RemovePoint(geom: Geometry, position: Integer)`
diff --git a/docs/api/flink/Geometry-Editors/ST_RemoveRepeatedPoints.md 
b/docs/api/flink/Geometry-Editors/ST_RemoveRepeatedPoints.md
index d4451a4566..6b9d9dddf3 100644
--- a/docs/api/flink/Geometry-Editors/ST_RemoveRepeatedPoints.md
+++ b/docs/api/flink/Geometry-Editors/ST_RemoveRepeatedPoints.md
@@ -21,6 +21,8 @@
 
 Introduction: This function eliminates consecutive duplicate points within a 
geometry, preserving endpoints of LineStrings. It operates on 
(Multi)LineStrings, (Multi)Polygons, and MultiPoints, processing 
GeometryCollection elements individually. When an optional 'tolerance' value is 
provided, vertices within that distance are also considered duplicates.
 
+![ST_RemoveRepeatedPoints](../../../image/ST_RemoveRepeatedPoints/ST_RemoveRepeatedPoints.svg
 "ST_RemoveRepeatedPoints")
+
 Format:
 
 `ST_RemoveRepeatedPoints(geom: Geometry, tolerance: Double)`
diff --git a/docs/api/flink/Geometry-Editors/ST_Reverse.md 
b/docs/api/flink/Geometry-Editors/ST_Reverse.md
index 5f7b99ec05..707ed1fb3b 100644
--- a/docs/api/flink/Geometry-Editors/ST_Reverse.md
+++ b/docs/api/flink/Geometry-Editors/ST_Reverse.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the geometry with vertex order reversed
 
+![ST_Reverse](../../../image/ST_Reverse/ST_Reverse.svg "ST_Reverse")
+
 Format: `ST_Reverse (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_Segmentize.md 
b/docs/api/flink/Geometry-Editors/ST_Segmentize.md
index b645f98ab6..e531f7b0c7 100644
--- a/docs/api/flink/Geometry-Editors/ST_Segmentize.md
+++ b/docs/api/flink/Geometry-Editors/ST_Segmentize.md
@@ -23,6 +23,8 @@ Introduction: Returns a modified geometry having no segment 
longer than the give
 
 The length calculation is performed in 2D. When a segment is longer than the 
specified maximum length, it is split into multiple, equal-length subsegments.
 
+![ST_Segmentize](../../../image/ST_Segmentize/ST_Segmentize.svg 
"ST_Segmentize")
+
 Format: `ST_Segmentize(geom: Geometry, max_segment_length: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_SetPoint.md 
b/docs/api/flink/Geometry-Editors/ST_SetPoint.md
index 46be53f56d..71e65788d2 100644
--- a/docs/api/flink/Geometry-Editors/ST_SetPoint.md
+++ b/docs/api/flink/Geometry-Editors/ST_SetPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Replace Nth point of linestring with given point. Index is 
0-based. Negative index are counted backwards, e.g., -1 is last point.
 
+![ST_SetPoint](../../../image/ST_SetPoint/ST_SetPoint.svg "ST_SetPoint")
+
 Format: `ST_SetPoint (linestring: Geometry, index: Integer, point: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Geometry-Editors/ST_ShiftLongitude.md 
b/docs/api/flink/Geometry-Editors/ST_ShiftLongitude.md
index 7ab039ea29..6673c81997 100644
--- a/docs/api/flink/Geometry-Editors/ST_ShiftLongitude.md
+++ b/docs/api/flink/Geometry-Editors/ST_ShiftLongitude.md
@@ -24,6 +24,8 @@ Introduction: Modifies longitude coordinates in geometries, 
shifting values betw
 !!!note
     This function is only applicable to geometries that use lon/lat coordinate 
systems.
 
+![ST_ShiftLongitude](../../../image/ST_ShiftLongitude/ST_ShiftLongitude.svg 
"ST_ShiftLongitude")
+
 Format: `ST_ShiftLongitude (geom: geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_AddPoint.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_AddPoint.md
index 2b5faf83a0..f468a427d0 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_AddPoint.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_AddPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: RETURN Linestring with additional point at the given index, if 
position is not available the point will be added at the end of line.
 
+![ST_AddPoint](../../../../image/ST_AddPoint/ST_AddPoint.svg "ST_AddPoint")
+
 Format: `ST_AddPoint(geom: geometry, point: geometry, position: integer)`
 
 Format: `ST_AddPoint(geom: geometry, point: geometry)`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Collect.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Collect.md
index ff2d99852c..5f6a52bc88 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Collect.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Collect.md
@@ -30,6 +30,8 @@ Build an appropriate `Geometry`, `MultiGeometry`, or 
`GeometryCollection` to con
 
 Note that this method does not "flatten" Geometries in the input, and hence if 
any MultiGeometries are contained in the input, a GeometryCollection containing 
them will be returned.
 
+![ST_Collect](../../../../image/ST_Collect/ST_Collect.svg "ST_Collect")
+
 Format
 
 `ST_Collect(*geom: geometry)`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_CollectionExtract.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_CollectionExtract.md
index d977bb6007..270fa3242e 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_CollectionExtract.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_CollectionExtract.md
@@ -29,6 +29,8 @@ The type numbers are:
 
 If the type parameter is omitted a multi-geometry of the highest dimension is 
returned.
 
+![ST_CollectionExtract](../../../../image/ST_CollectionExtract/ST_CollectionExtract.svg
 "ST_CollectionExtract")
+
 Format: `ST_CollectionExtract (A:geometry)`
 
 Format: `ST_CollectionExtract (A:geometry, type:Int)`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_FlipCoordinates.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_FlipCoordinates.md
index 4817faec0b..57812c93c4 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_FlipCoordinates.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_FlipCoordinates.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a version of the given geometry with X and Y axis 
flipped.
 
+![ST_FlipCoordinates](../../../../image/ST_FlipCoordinates/ST_FlipCoordinates.svg
 "ST_FlipCoordinates")
+
 Format: `ST_FlipCoordinates(A:geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force2D.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force2D.md
index 510cecc263..d5cd13cc3a 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force2D.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force2D.md
@@ -21,6 +21,8 @@
 
 Introduction: Forces the geometries into a "2-dimensional mode" so that all 
output representations will only have the X and Y coordinates. This function is 
an alias of [ST_Force_2D](ST_Force_2D.md).
 
+![ST_Force2D](../../../../image/ST_Force2D/ST_Force2D.svg "ST_Force2D")
+
 Format: `ST_Force2D (A:geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3D.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3D.md
index c446772beb..ff040e0d36 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3D.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3D.md
@@ -27,6 +27,8 @@ If the given geometry is empty, no change is performed on it.
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force3D](../../../../image/ST_Force3D/ST_Force3D.svg "ST_Force3D")
+
 Format: `ST_Force3D(geometry, zValue)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3DZ.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3DZ.md
index 15cc552c3d..b87acba3cd 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3DZ.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force3DZ.md
@@ -27,6 +27,8 @@ If the given geometry is empty, no change is performed on it. 
This function is a
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force3DZ](../../../../image/ST_Force3DZ/ST_Force3DZ.svg "ST_Force3DZ")
+
 Format: `ST_Force3DZ(geometry: Geometry, zValue: Double)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceCollection.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceCollection.md
index 0e49e10fac..5f7f240a2d 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceCollection.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceCollection.md
@@ -21,6 +21,8 @@
 
 Introduction: This function converts the input geometry into a 
GeometryCollection, regardless of the original geometry type. If the input is a 
multipart geometry, such as a MultiPolygon or MultiLineString, it will be 
decomposed into a GeometryCollection containing each individual Polygon or 
LineString element from the original multipart geometry.
 
+![ST_ForceCollection](../../../../image/ST_ForceCollection/ST_ForceCollection.svg
 "ST_ForceCollection")
+
 Format: `ST_ForceCollection(geom: Geometry)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCCW.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCCW.md
index efdc2c6285..7821e30798 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCCW.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCCW.md
@@ -21,6 +21,8 @@
 
 Introduction: For (Multi)Polygon geometries, this function sets the exterior 
ring orientation to counter-clockwise and interior rings to clockwise 
orientation. Non-polygonal geometries are returned unchanged.
 
+![ST_ForcePolygonCCW](../../../../image/ST_ForcePolygonCCW/ST_ForcePolygonCCW.svg
 "ST_ForcePolygonCCW")
+
 Format: `ST_ForcePolygonCCW(geom: Geometry)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCW.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCW.md
index c9c5dd98dd..7d65aa2fff 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCW.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForcePolygonCW.md
@@ -21,6 +21,8 @@
 
 Introduction: For (Multi)Polygon geometries, this function sets the exterior 
ring orientation to clockwise and interior rings to counter-clockwise 
orientation. Non-polygonal geometries are returned unchanged.
 
+![ST_ForcePolygonCW](../../../../image/ST_ForcePolygonCW/ST_ForcePolygonCW.svg 
"ST_ForcePolygonCW")
+
 Format: `ST_ForcePolygonCW(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceRHR.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceRHR.md
index 92a7559d60..45b7282c0f 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceRHR.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ForceRHR.md
@@ -21,6 +21,8 @@
 
 Introduction: Sets the orientation of polygon vertex orderings to follow the 
Right-Hand-Rule convention. The exterior ring will have a clockwise winding 
order, while any interior rings are oriented counter-clockwise. This ensures 
the area bounded by the polygon falls on the right-hand side relative to the 
ring directions. The function is an alias for 
[ST_ForcePolygonCW](ST_ForcePolygonCW.md).
 
+![ST_ForceRHR](../../../../image/ST_ForceRHR/ST_ForceRHR.svg "ST_ForceRHR")
+
 Format: `ST_ForceRHR(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force_2D.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force_2D.md
index 2a59d8fa9e..bb8564bd1b 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force_2D.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Force_2D.md
@@ -21,6 +21,8 @@
 
 Introduction: Forces the geometries into a "2-dimensional mode" so that all 
output representations will only have the X and Y coordinates. This function is 
an alias of [ST_Force2D](ST_Force2D.md).
 
+![ST_Force_2D](../../../../image/ST_Force_2D/ST_Force_2D.svg "ST_Force_2D")
+
 Format: `ST_Force_2D (A:geometry)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineFromMultiPoint.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineFromMultiPoint.md
index 688ef54306..4a38c162dc 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineFromMultiPoint.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineFromMultiPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Creates a LineString from a MultiPoint geometry.
 
+![ST_LineFromMultiPoint](../../../../image/ST_LineFromMultiPoint/ST_LineFromMultiPoint.svg
 "ST_LineFromMultiPoint")
+
 Format: `ST_LineFromMultiPoint (A:geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineMerge.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineMerge.md
index caedb0e123..26a94d340d 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineMerge.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_LineMerge.md
@@ -24,6 +24,8 @@ Introduction: Returns a LineString or MultiLineString formed 
by sewing together
 !!!note
     Only works for MULTILINESTRING. Using other geometry will return a 
GEOMETRYCOLLECTION EMPTY. If no merging can be performed, the original 
MULTILINESTRING is returned.
 
+![ST_LineMerge](../../../../image/ST_LineMerge/ST_LineMerge.svg "ST_LineMerge")
+
 Format: `ST_LineMerge (A:geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakeLine.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakeLine.md
index 2502d34bf4..1a3a52c4aa 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakeLine.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakeLine.md
@@ -21,6 +21,8 @@
 
 Introduction: Creates a LineString containing the points of Point, MultiPoint, 
or LineString geometries. Other geometry types cause an error.
 
+![ST_MakeLine](../../../../image/ST_MakeLine/ST_MakeLine.svg "ST_MakeLine")
+
 Format:
 
 `ST_MakeLine(geom1: Geometry, geom2: Geometry)`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakePolygon.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakePolygon.md
index 81e61d533a..c86fb57eed 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakePolygon.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_MakePolygon.md
@@ -21,6 +21,8 @@
 
 Introduction: Function to convert closed linestring to polygon including 
holes. The holes must be a MultiLinestring. If holes are provided, they should 
be fully contained within the shell. Holes outside the shell will produce an 
invalid polygon (matching PostGIS behavior). Use `ST_IsValid` to check the 
result.
 
+![ST_MakePolygon](../../../../image/ST_MakePolygon/ST_MakePolygon.svg 
"ST_MakePolygon")
+
 Format: `ST_MakePolygon(geom: geometry, holes: <geometry>)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Multi.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Multi.md
index 0cd723e001..b05c3db5c6 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Multi.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Multi.md
@@ -22,6 +22,8 @@
 Introduction: Returns a MultiGeometry object based on the geometry input.
 ST_Multi is basically an alias for ST_Collect with one geometry.
 
+![ST_Multi](../../../../image/ST_Multi/ST_Multi.svg "ST_Multi")
+
 Format
 
 `ST_Multi(geom: geometry)`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Normalize.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Normalize.md
index 34e6136809..c660d98b45 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Normalize.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Normalize.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the input geometry in its normalized form.
 
+![ST_Normalize](../../../../image/ST_Normalize/ST_Normalize.svg "ST_Normalize")
+
 Format
 
 `ST_Normalize(geom: geometry)`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Polygon.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Polygon.md
index 0843f8216a..eb050a7e6b 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Polygon.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Polygon.md
@@ -21,6 +21,8 @@
 
 Introduction: Function to create a polygon built from the given LineString and 
sets the spatial reference system from the srid
 
+![ST_Polygon](../../../../image/ST_Polygon/ST_Polygon.svg "ST_Polygon")
+
 Format: `ST_Polygon(geom: Geometry, srid: Integer)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Project.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Project.md
index 6b2f916225..1c645e0d28 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Project.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Project.md
@@ -21,6 +21,8 @@
 
 Introduction: Calculates a new point location given a starting point, 
distance, and azimuth. The azimuth indicates the direction, expressed in 
radians, and is measured in a clockwise manner starting from true north. The 
system can handle azimuth values that are negative or exceed 2π (360 degrees). 
The optional `lenient` parameter prevents an error if the input geometry is not 
a Point. Its default value is `false`.
 
+![ST_Project](../../../../image/ST_Project/ST_Project.svg "ST_Project")
+
 Format:
 
 ```
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemovePoint.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemovePoint.md
index 7c0689a557..b5d233d7cc 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemovePoint.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemovePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: RETURN Line with removed point at given index, position can be 
omitted and then last one will be removed.
 
+![ST_RemovePoint](../../../../image/ST_RemovePoint/ST_RemovePoint.svg 
"ST_RemovePoint")
+
 Format: `ST_RemovePoint(geom: geometry, position: integer)`
 
 Format: `ST_RemovePoint(geom: geometry)`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemoveRepeatedPoints.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemoveRepeatedPoints.md
index af44dfdec3..c115fa6a38 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemoveRepeatedPoints.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_RemoveRepeatedPoints.md
@@ -21,6 +21,8 @@
 
 Introduction: This function eliminates consecutive duplicate points within a 
geometry, preserving endpoints of LineStrings. It operates on 
(Multi)LineStrings, (Multi)Polygons, and MultiPoints, processing 
GeometryCollection elements individually. When an optional 'tolerance' value is 
provided, vertices within that distance are also considered duplicates.
 
+![ST_RemoveRepeatedPoints](../../../../image/ST_RemoveRepeatedPoints/ST_RemoveRepeatedPoints.svg
 "ST_RemoveRepeatedPoints")
+
 Format:
 
 `ST_RemoveRepeatedPoints(geom: Geometry, tolerance: Double)`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Reverse.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Reverse.md
index 995273c9d1..d06c01202f 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Reverse.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Reverse.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the geometry with vertex order reversed
 
+![ST_Reverse](../../../../image/ST_Reverse/ST_Reverse.svg "ST_Reverse")
+
 Format: `ST_Reverse (A:geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Segmentize.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Segmentize.md
index d270526f9e..223eab44ef 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_Segmentize.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_Segmentize.md
@@ -23,6 +23,8 @@ Introduction: Returns a modified geometry having no segment 
longer than the give
 
 The length calculation is performed in 2D. When a segment is longer than the 
specified maximum length, it is split into multiple, equal-length subsegments.
 
+![ST_Segmentize](../../../../image/ST_Segmentize/ST_Segmentize.svg 
"ST_Segmentize")
+
 Format: `ST_Segmentize(geom: Geometry, max_segment_length: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Geometry-Editors/ST_SetPoint.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_SetPoint.md
index ef3e8ede2f..e6a1da9263 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_SetPoint.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_SetPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Replace Nth point of linestring with given point. Index is 
0-based. Negative index are counted backwards, e.g., -1 is last point.
 
+![ST_SetPoint](../../../../image/ST_SetPoint/ST_SetPoint.svg "ST_SetPoint")
+
 Format: `ST_SetPoint (linestring: geometry, index: integer, point: geometry)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ShiftLongitude.md 
b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ShiftLongitude.md
index 5d9a70e9bb..62ed64dc4d 100644
--- a/docs/api/snowflake/vector-data/Geometry-Editors/ST_ShiftLongitude.md
+++ b/docs/api/snowflake/vector-data/Geometry-Editors/ST_ShiftLongitude.md
@@ -24,5 +24,7 @@ Introduction: Modifies longitude coordinates in geometries, 
shifting values betw
 !!!note
     This function is only applicable to geometries that use lon/lat coordinate 
systems.
 
+![ST_ShiftLongitude](../../../../image/ST_ShiftLongitude/ST_ShiftLongitude.svg 
"ST_ShiftLongitude")
+
 Format: `ST_ShiftLongitude (geom: geometry)`
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_AddPoint.md 
b/docs/api/sql/Geometry-Editors/ST_AddPoint.md
index 213bf78f29..67bfd38c4b 100644
--- a/docs/api/sql/Geometry-Editors/ST_AddPoint.md
+++ b/docs/api/sql/Geometry-Editors/ST_AddPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: RETURN Linestring with additional point at the given index, if 
position is not available the point will be added at the end of line.
 
+![ST_AddPoint](../../../image/ST_AddPoint/ST_AddPoint.svg "ST_AddPoint")
+
 Format:
 
 `ST_AddPoint(geom: Geometry, point: Geometry, position: Integer)`
diff --git a/docs/api/sql/Geometry-Editors/ST_Collect.md 
b/docs/api/sql/Geometry-Editors/ST_Collect.md
index e8b5fd622b..768551fe6a 100644
--- a/docs/api/sql/Geometry-Editors/ST_Collect.md
+++ b/docs/api/sql/Geometry-Editors/ST_Collect.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns MultiGeometry object based on geometry column/s or array 
with geometries
 
+![ST_Collect](../../../image/ST_Collect/ST_Collect.svg "ST_Collect")
+
 Format:
 
 `ST_Collect(*geom: Geometry)`
diff --git a/docs/api/sql/Geometry-Editors/ST_CollectionExtract.md 
b/docs/api/sql/Geometry-Editors/ST_CollectionExtract.md
index 1624aed6a7..599c20f43e 100644
--- a/docs/api/sql/Geometry-Editors/ST_CollectionExtract.md
+++ b/docs/api/sql/Geometry-Editors/ST_CollectionExtract.md
@@ -29,6 +29,8 @@ The type numbers are:
 
 If the type parameter is omitted a multi-geometry of the highest dimension is 
returned.
 
+![ST_CollectionExtract](../../../image/ST_CollectionExtract/ST_CollectionExtract.svg
 "ST_CollectionExtract")
+
 Format:
 
 `ST_CollectionExtract (A: Geometry)`
diff --git a/docs/api/sql/Geometry-Editors/ST_FlipCoordinates.md 
b/docs/api/sql/Geometry-Editors/ST_FlipCoordinates.md
index 772818b267..7105dc984f 100644
--- a/docs/api/sql/Geometry-Editors/ST_FlipCoordinates.md
+++ b/docs/api/sql/Geometry-Editors/ST_FlipCoordinates.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a version of the given geometry with X and Y axis 
flipped.
 
+![ST_FlipCoordinates](../../../image/ST_FlipCoordinates/ST_FlipCoordinates.svg 
"ST_FlipCoordinates")
+
 Format: `ST_FlipCoordinates(A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Force2D.md 
b/docs/api/sql/Geometry-Editors/ST_Force2D.md
index 7920453c37..343a094158 100644
--- a/docs/api/sql/Geometry-Editors/ST_Force2D.md
+++ b/docs/api/sql/Geometry-Editors/ST_Force2D.md
@@ -21,6 +21,8 @@
 
 Introduction: Forces the geometries into a "2-dimensional mode" so that all 
output representations will only have the X and Y coordinates. This function is 
an alias of [ST_Force_2D](ST_Force_2D.md).
 
+![ST_Force2D](../../../image/ST_Force2D/ST_Force2D.svg "ST_Force2D")
+
 Format: `ST_Force2D (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Force3D.md 
b/docs/api/sql/Geometry-Editors/ST_Force3D.md
index bc88e98e29..65a22cad5a 100644
--- a/docs/api/sql/Geometry-Editors/ST_Force3D.md
+++ b/docs/api/sql/Geometry-Editors/ST_Force3D.md
@@ -27,6 +27,8 @@ If the given geometry is empty, no change is performed on it.
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force3D](../../../image/ST_Force3D/ST_Force3D.svg "ST_Force3D")
+
 Format: `ST_Force3D(geometry: Geometry, zValue: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Force3DM.md 
b/docs/api/sql/Geometry-Editors/ST_Force3DM.md
index 9d78d84f72..2d43c42bc0 100644
--- a/docs/api/sql/Geometry-Editors/ST_Force3DM.md
+++ b/docs/api/sql/Geometry-Editors/ST_Force3DM.md
@@ -24,6 +24,8 @@ Introduction: Forces the geometry into XYM mode. Retains any 
existing M coordina
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds M for in the WKT.
 
+![ST_Force3DM](../../../image/ST_Force3DM/ST_Force3DM.svg "ST_Force3DM")
+
 Format: `ST_Force3DM(geometry: Geometry, mValue: Double = 0.0)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Force3DZ.md 
b/docs/api/sql/Geometry-Editors/ST_Force3DZ.md
index cf361707b2..8d35600878 100644
--- a/docs/api/sql/Geometry-Editors/ST_Force3DZ.md
+++ b/docs/api/sql/Geometry-Editors/ST_Force3DZ.md
@@ -27,6 +27,8 @@ If the given geometry is empty, no change is performed on it. 
This function is a
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force3DZ](../../../image/ST_Force3DZ/ST_Force3DZ.svg "ST_Force3DZ")
+
 Format: `ST_Force3DZ(geometry: Geometry, zValue: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Force4D.md 
b/docs/api/sql/Geometry-Editors/ST_Force4D.md
index 7483bd00e7..1804936530 100644
--- a/docs/api/sql/Geometry-Editors/ST_Force4D.md
+++ b/docs/api/sql/Geometry-Editors/ST_Force4D.md
@@ -24,6 +24,8 @@ Introduction: Converts the input geometry to 4D XYZM 
representation. Retains ori
 !!!Note
     Example output is after calling ST_AsText() on returned geometry, which 
adds Z for in the WKT for 3D geometries
 
+![ST_Force4D](../../../image/ST_Force4D/ST_Force4D.svg "ST_Force4D")
+
 Format:
 
 `ST_Force4D(geom: Geometry, zValue: Double, mValue: Double)`
diff --git a/docs/api/sql/Geometry-Editors/ST_ForceCollection.md 
b/docs/api/sql/Geometry-Editors/ST_ForceCollection.md
index d9a7820b49..b5a62b6bea 100644
--- a/docs/api/sql/Geometry-Editors/ST_ForceCollection.md
+++ b/docs/api/sql/Geometry-Editors/ST_ForceCollection.md
@@ -21,6 +21,8 @@
 
 Introduction: This function converts the input geometry into a 
GeometryCollection, regardless of the original geometry type. If the input is a 
multipart geometry, such as a MultiPolygon or MultiLineString, it will be 
decomposed into a GeometryCollection containing each individual Polygon or 
LineString element from the original multipart geometry.
 
+![ST_ForceCollection](../../../image/ST_ForceCollection/ST_ForceCollection.svg 
"ST_ForceCollection")
+
 Format: `ST_ForceCollection(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_ForcePolygonCCW.md 
b/docs/api/sql/Geometry-Editors/ST_ForcePolygonCCW.md
index 3ed3d441bc..4d2eae510d 100644
--- a/docs/api/sql/Geometry-Editors/ST_ForcePolygonCCW.md
+++ b/docs/api/sql/Geometry-Editors/ST_ForcePolygonCCW.md
@@ -21,6 +21,8 @@
 
 Introduction: For (Multi)Polygon geometries, this function sets the exterior 
ring orientation to counter-clockwise and interior rings to clockwise 
orientation. Non-polygonal geometries are returned unchanged.
 
+![ST_ForcePolygonCCW](../../../image/ST_ForcePolygonCCW/ST_ForcePolygonCCW.svg 
"ST_ForcePolygonCCW")
+
 Format: `ST_ForcePolygonCCW(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_ForcePolygonCW.md 
b/docs/api/sql/Geometry-Editors/ST_ForcePolygonCW.md
index 639fe20e44..2737e9d3ea 100644
--- a/docs/api/sql/Geometry-Editors/ST_ForcePolygonCW.md
+++ b/docs/api/sql/Geometry-Editors/ST_ForcePolygonCW.md
@@ -21,6 +21,8 @@
 
 Introduction: For (Multi)Polygon geometries, this function sets the exterior 
ring orientation to clockwise and interior rings to counter-clockwise 
orientation. Non-polygonal geometries are returned unchanged.
 
+![ST_ForcePolygonCW](../../../image/ST_ForcePolygonCW/ST_ForcePolygonCW.svg 
"ST_ForcePolygonCW")
+
 Format: `ST_ForcePolygonCW(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_ForceRHR.md 
b/docs/api/sql/Geometry-Editors/ST_ForceRHR.md
index e91bfe953b..0056ba405d 100644
--- a/docs/api/sql/Geometry-Editors/ST_ForceRHR.md
+++ b/docs/api/sql/Geometry-Editors/ST_ForceRHR.md
@@ -21,6 +21,8 @@
 
 Introduction: Sets the orientation of polygon vertex orderings to follow the 
Right-Hand-Rule convention. The exterior ring will have a clockwise winding 
order, while any interior rings are oriented counter-clockwise. This ensures 
the area bounded by the polygon falls on the right-hand side relative to the 
ring directions. The function is an alias for 
[ST_ForcePolygonCW](ST_ForcePolygonCW.md).
 
+![ST_ForceRHR](../../../image/ST_ForceRHR/ST_ForceRHR.svg "ST_ForceRHR")
+
 Format: `ST_ForceRHR(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Force_2D.md 
b/docs/api/sql/Geometry-Editors/ST_Force_2D.md
index 3d569c3aa8..afe90542e0 100644
--- a/docs/api/sql/Geometry-Editors/ST_Force_2D.md
+++ b/docs/api/sql/Geometry-Editors/ST_Force_2D.md
@@ -21,6 +21,8 @@
 
 Introduction: Forces the geometries into a "2-dimensional mode" so that all 
output representations will only have the X and Y coordinates. This function is 
an alias of [ST_Force2D](ST_Force2D.md).
 
+![ST_Force_2D](../../../image/ST_Force_2D/ST_Force_2D.svg "ST_Force_2D")
+
 Format: `ST_Force_2D (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_LineFromMultiPoint.md 
b/docs/api/sql/Geometry-Editors/ST_LineFromMultiPoint.md
index 571d0667bf..2601ac1f68 100644
--- a/docs/api/sql/Geometry-Editors/ST_LineFromMultiPoint.md
+++ b/docs/api/sql/Geometry-Editors/ST_LineFromMultiPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Creates a LineString from a MultiPoint geometry.
 
+![ST_LineFromMultiPoint](../../../image/ST_LineFromMultiPoint/ST_LineFromMultiPoint.svg
 "ST_LineFromMultiPoint")
+
 Format: `ST_LineFromMultiPoint (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_LineMerge.md 
b/docs/api/sql/Geometry-Editors/ST_LineMerge.md
index 5d37dd3820..26bdbe5649 100644
--- a/docs/api/sql/Geometry-Editors/ST_LineMerge.md
+++ b/docs/api/sql/Geometry-Editors/ST_LineMerge.md
@@ -24,6 +24,8 @@ Introduction: Returns a LineString or MultiLineString formed 
by sewing together
 !!!note
     Only works for MULTILINESTRING. Using other geometry will return a 
GEOMETRYCOLLECTION EMPTY. If no merging can be performed, the original 
MULTILINESTRING is returned.
 
+![ST_LineMerge](../../../image/ST_LineMerge/ST_LineMerge.svg "ST_LineMerge")
+
 Format: `ST_LineMerge (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_LineSegments.md 
b/docs/api/sql/Geometry-Editors/ST_LineSegments.md
index b93ffd7a91..6e03dfcc6d 100644
--- a/docs/api/sql/Geometry-Editors/ST_LineSegments.md
+++ b/docs/api/sql/Geometry-Editors/ST_LineSegments.md
@@ -21,6 +21,8 @@
 
 Introduction: This function transforms a LineString containing multiple 
coordinates into an array of LineStrings, each with precisely two coordinates. 
The `lenient` argument, true by default, prevents an exception from being 
raised if the input geometry is not a LineString.
 
+![ST_LineSegments](../../../image/ST_LineSegments/ST_LineSegments.svg 
"ST_LineSegments")
+
 Format:
 
 `ST_LineSegments(geom: Geometry, lenient: Boolean)`
diff --git a/docs/api/sql/Geometry-Editors/ST_MakeLine.md 
b/docs/api/sql/Geometry-Editors/ST_MakeLine.md
index 40f5a85985..1a0d7ab6b0 100644
--- a/docs/api/sql/Geometry-Editors/ST_MakeLine.md
+++ b/docs/api/sql/Geometry-Editors/ST_MakeLine.md
@@ -21,6 +21,8 @@
 
 Introduction: Creates a LineString containing the points of Point, MultiPoint, 
or LineString geometries. Other geometry types cause an error.
 
+![ST_MakeLine](../../../image/ST_MakeLine/ST_MakeLine.svg "ST_MakeLine")
+
 Format:
 
 `ST_MakeLine(geom1: Geometry, geom2: Geometry)`
diff --git a/docs/api/sql/Geometry-Editors/ST_MakePolygon.md 
b/docs/api/sql/Geometry-Editors/ST_MakePolygon.md
index 93c5979bc7..d675c90ea0 100644
--- a/docs/api/sql/Geometry-Editors/ST_MakePolygon.md
+++ b/docs/api/sql/Geometry-Editors/ST_MakePolygon.md
@@ -21,6 +21,8 @@
 
 Introduction: Function to convert closed linestring to polygon including 
holes. If holes are provided, they should be fully contained within the shell. 
Holes outside the shell will produce an invalid polygon (matching PostGIS 
behavior). Use `ST_IsValid` to check the result.
 
+![ST_MakePolygon](../../../image/ST_MakePolygon/ST_MakePolygon.svg 
"ST_MakePolygon")
+
 Format: `ST_MakePolygon(geom: Geometry, holes: ARRAY[Geometry])`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Multi.md 
b/docs/api/sql/Geometry-Editors/ST_Multi.md
index d69f47381f..c5eacbaed4 100644
--- a/docs/api/sql/Geometry-Editors/ST_Multi.md
+++ b/docs/api/sql/Geometry-Editors/ST_Multi.md
@@ -22,6 +22,8 @@
 Introduction: Returns a MultiGeometry object based on the geometry input.
 ST_Multi is basically an alias for ST_Collect with one geometry.
 
+![ST_Multi](../../../image/ST_Multi/ST_Multi.svg "ST_Multi")
+
 Format: `ST_Multi(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Normalize.md 
b/docs/api/sql/Geometry-Editors/ST_Normalize.md
index 9d7c2f3b92..3b6dc23475 100644
--- a/docs/api/sql/Geometry-Editors/ST_Normalize.md
+++ b/docs/api/sql/Geometry-Editors/ST_Normalize.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the input geometry in its normalized form.
 
+![ST_Normalize](../../../image/ST_Normalize/ST_Normalize.svg "ST_Normalize")
+
 Format:
 
 `ST_Normalize(geom: Geometry)`
diff --git a/docs/api/sql/Geometry-Editors/ST_Polygon.md 
b/docs/api/sql/Geometry-Editors/ST_Polygon.md
index d69b491b72..e4aca9c31e 100644
--- a/docs/api/sql/Geometry-Editors/ST_Polygon.md
+++ b/docs/api/sql/Geometry-Editors/ST_Polygon.md
@@ -21,6 +21,8 @@
 
 Introduction: Function to create a polygon built from the given LineString and 
sets the spatial reference system from the srid
 
+![ST_Polygon](../../../image/ST_Polygon/ST_Polygon.svg "ST_Polygon")
+
 Format: `ST_Polygon(geom: Geometry, srid: Integer)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Project.md 
b/docs/api/sql/Geometry-Editors/ST_Project.md
index 41c9b4cca8..1c0fd32953 100644
--- a/docs/api/sql/Geometry-Editors/ST_Project.md
+++ b/docs/api/sql/Geometry-Editors/ST_Project.md
@@ -21,6 +21,8 @@
 
 Introduction: Calculates a new point location given a starting point, 
distance, and azimuth. The azimuth indicates the direction, expressed in 
radians, and is measured in a clockwise manner starting from true north. The 
system can handle azimuth values that are negative or exceed 2π (360 degrees). 
The optional `lenient` parameter prevents an error if the input geometry is not 
a Point. Its default value is `false`.
 
+![ST_Project](../../../image/ST_Project/ST_Project.svg "ST_Project")
+
 Format:
 
 ```
diff --git a/docs/api/sql/Geometry-Editors/ST_RemovePoint.md 
b/docs/api/sql/Geometry-Editors/ST_RemovePoint.md
index 79e03219a7..703fbacc56 100644
--- a/docs/api/sql/Geometry-Editors/ST_RemovePoint.md
+++ b/docs/api/sql/Geometry-Editors/ST_RemovePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: RETURN Line with removed point at given index, position can be 
omitted and then last one will be removed.
 
+![ST_RemovePoint](../../../image/ST_RemovePoint/ST_RemovePoint.svg 
"ST_RemovePoint")
+
 Format:
 
 `ST_RemovePoint(geom: Geometry, position: Integer)`
diff --git a/docs/api/sql/Geometry-Editors/ST_RemoveRepeatedPoints.md 
b/docs/api/sql/Geometry-Editors/ST_RemoveRepeatedPoints.md
index d4451a4566..6b9d9dddf3 100644
--- a/docs/api/sql/Geometry-Editors/ST_RemoveRepeatedPoints.md
+++ b/docs/api/sql/Geometry-Editors/ST_RemoveRepeatedPoints.md
@@ -21,6 +21,8 @@
 
 Introduction: This function eliminates consecutive duplicate points within a 
geometry, preserving endpoints of LineStrings. It operates on 
(Multi)LineStrings, (Multi)Polygons, and MultiPoints, processing 
GeometryCollection elements individually. When an optional 'tolerance' value is 
provided, vertices within that distance are also considered duplicates.
 
+![ST_RemoveRepeatedPoints](../../../image/ST_RemoveRepeatedPoints/ST_RemoveRepeatedPoints.svg
 "ST_RemoveRepeatedPoints")
+
 Format:
 
 `ST_RemoveRepeatedPoints(geom: Geometry, tolerance: Double)`
diff --git a/docs/api/sql/Geometry-Editors/ST_Reverse.md 
b/docs/api/sql/Geometry-Editors/ST_Reverse.md
index 4b3205e49b..da2e867ea8 100644
--- a/docs/api/sql/Geometry-Editors/ST_Reverse.md
+++ b/docs/api/sql/Geometry-Editors/ST_Reverse.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the geometry with vertex order reversed
 
+![ST_Reverse](../../../image/ST_Reverse/ST_Reverse.svg "ST_Reverse")
+
 Format: `ST_Reverse (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_Segmentize.md 
b/docs/api/sql/Geometry-Editors/ST_Segmentize.md
index b645f98ab6..e531f7b0c7 100644
--- a/docs/api/sql/Geometry-Editors/ST_Segmentize.md
+++ b/docs/api/sql/Geometry-Editors/ST_Segmentize.md
@@ -23,6 +23,8 @@ Introduction: Returns a modified geometry having no segment 
longer than the give
 
 The length calculation is performed in 2D. When a segment is longer than the 
specified maximum length, it is split into multiple, equal-length subsegments.
 
+![ST_Segmentize](../../../image/ST_Segmentize/ST_Segmentize.svg 
"ST_Segmentize")
+
 Format: `ST_Segmentize(geom: Geometry, max_segment_length: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_SetPoint.md 
b/docs/api/sql/Geometry-Editors/ST_SetPoint.md
index 7ea936a2ca..cfaba9d3b2 100644
--- a/docs/api/sql/Geometry-Editors/ST_SetPoint.md
+++ b/docs/api/sql/Geometry-Editors/ST_SetPoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Replace Nth point of linestring with given point. Index is 
0-based. Negative index are counted backwards, e.g., -1 is last point.
 
+![ST_SetPoint](../../../image/ST_SetPoint/ST_SetPoint.svg "ST_SetPoint")
+
 Format: `ST_SetPoint (linestring: Geometry, index: Integer, point: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Geometry-Editors/ST_ShiftLongitude.md 
b/docs/api/sql/Geometry-Editors/ST_ShiftLongitude.md
index 7ab039ea29..6673c81997 100644
--- a/docs/api/sql/Geometry-Editors/ST_ShiftLongitude.md
+++ b/docs/api/sql/Geometry-Editors/ST_ShiftLongitude.md
@@ -24,6 +24,8 @@ Introduction: Modifies longitude coordinates in geometries, 
shifting values betw
 !!!note
     This function is only applicable to geometries that use lon/lat coordinate 
systems.
 
+![ST_ShiftLongitude](../../../image/ST_ShiftLongitude/ST_ShiftLongitude.svg 
"ST_ShiftLongitude")
+
 Format: `ST_ShiftLongitude (geom: geometry)`
 
 Return type: `Geometry`
diff --git a/docs/image/ST_AddPoint/ST_AddPoint.svg 
b/docs/image/ST_AddPoint/ST_AddPoint.svg
new file mode 100644
index 0000000000..ec583c7a50
--- /dev/null
+++ b/docs/image/ST_AddPoint/ST_AddPoint.svg
@@ -0,0 +1,36 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_AddPoint</text>
+  <polyline points="96.51,213.95 198.84,137.21 301.16,188.37 403.49,111.63" 
fill="none" stroke="#4a90d9" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" stroke-dasharray="6,3" />
+  <circle cx="96.51" cy="213.95" r="3" fill="#4a90d9" />
+  <circle cx="198.84" cy="137.21" r="3" fill="#4a90d9" />
+  <circle cx="301.16" cy="188.37" r="3" fill="#4a90d9" />
+  <circle cx="403.49" cy="111.63" r="3" fill="#4a90d9" />
+  <polyline points="96.51,213.95 198.84,137.21 250.0,86.05 301.16,188.37 
403.49,111.63" fill="none" stroke="#2ecc71" stroke-width="2.5" 
stroke-linecap="round" stroke-linejoin="round" />
+  <circle cx="96.51" cy="213.95" r="3" fill="#2ecc71" />
+  <circle cx="198.84" cy="137.21" r="3" fill="#2ecc71" />
+  <circle cx="250.0" cy="86.05" r="3" fill="#2ecc71" />
+  <circle cx="301.16" cy="188.37" r="3" fill="#2ecc71" />
+  <circle cx="403.49" cy="111.63" r="3" fill="#2ecc71" />
+  <circle cx="250.0" cy="86.05" r="8" fill="white" stroke="#2ecc71" 
stroke-width="2.5" />
+  <circle cx="250.0" cy="86.05" r="4" fill="#2ecc71" />
+  <text x="260" y="76" font-size="13" fill="#2ecc71" 
font-weight="bold">new</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Adds a point to a LineString at the given index</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Collect/ST_Collect.svg 
b/docs/image/ST_Collect/ST_Collect.svg
new file mode 100644
index 0000000000..5adff8b3f7
--- /dev/null
+++ b/docs/image/ST_Collect/ST_Collect.svg
@@ -0,0 +1,27 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Collect</text>
+  <path d="M 112.5 218.75 L 222.5 218.75 L 222.5 108.75 L 112.5 108.75 L 112.5 
218.75 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" stroke-width="2.5" 
fill-rule="evenodd" />
+  <path d="M 277.5 191.25 L 387.5 191.25 L 387.5 81.25 L 277.5 81.25 L 277.5 
191.25 Z" fill="rgba(217,74,74,0.15)" stroke="#d94a4a" stroke-width="2.5" 
fill-rule="evenodd" />
+  <path d="M 98.75 232.5 L 401.25 232.5 L 401.25 67.5 L 98.75 67.5 L 98.75 
232.5 Z" fill="none" stroke="#2ecc71" stroke-width="2" fill-rule="evenodd" 
stroke-dasharray="8,4" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Collects geometries into a multi-geometry</text>
+  <rect x="89" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="105" y="266" font-size="13" fill="#333333">Geometry A</text>
+  <rect x="199" y="255" width="12" height="12" rx="2" fill="#d94a4a" 
stroke="#d94a4a" stroke-width="1" />
+  <text x="215" y="266" font-size="13" fill="#333333">Geometry B</text>
+  <rect x="309" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="325" y="266" font-size="13" fill="#333333">Collected</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_CollectionExtract/ST_CollectionExtract.svg 
b/docs/image/ST_CollectionExtract/ST_CollectionExtract.svg
new file mode 100644
index 0000000000..80e71740f6
--- /dev/null
+++ b/docs/image/ST_CollectionExtract/ST_CollectionExtract.svg
@@ -0,0 +1,28 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_CollectionExtract</text>
+  <circle cx="92.86" cy="150.0" r="5" fill="#999999" stroke="#999999" 
stroke-width="1.5" />
+  <polyline points="155.71,212.86 250.0,118.57" fill="none" stroke="#999999" 
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="4,3" />
+  <circle cx="155.71" cy="212.86" r="3" fill="#999999" />
+  <circle cx="250.0" cy="118.57" r="3" fill="#999999" />
+  <path d="M 281.43 212.86 L 407.14 212.86 L 407.14 87.14 L 281.43 87.14 L 
281.43 212.86 Z" fill="rgba(153,153,153,0.1)" stroke="#999999" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="4,3" />
+  <path d="M 281.43 212.86 L 407.14 212.86 L 407.14 87.14 L 281.43 87.14 L 
281.43 212.86 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Extracts a specific geometry type from a collection</text>
+  <rect x="84" y="255" width="12" height="12" rx="2" fill="#999999" 
stroke="#999999" stroke-width="1" />
+  <text x="100" y="266" font-size="13" fill="#333333">Input collection</text>
+  <rect x="242" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="258" y="266" font-size="13" fill="#333333">Extracted (type=3)</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_FlipCoordinates/ST_FlipCoordinates.svg 
b/docs/image/ST_FlipCoordinates/ST_FlipCoordinates.svg
new file mode 100644
index 0000000000..63279446c5
--- /dev/null
+++ b/docs/image/ST_FlipCoordinates/ST_FlipCoordinates.svg
@@ -0,0 +1,31 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_FlipCoordinates</text>
+  <line x1="108.97" y1="291.03" x2="391.03" y2="291.03" stroke="#cccccc" 
stroke-width="1" marker-end="url(#arrowGray)" />
+  <text x="399.03" y="295.03" font-size="12" fill="#999999">X</text>
+  <line x1="108.97" y1="291.03" x2="108.97" y2="8.97" stroke="#cccccc" 
stroke-width="1" marker-end="url(#arrowGray)" />
+  <text x="94.97" y="4.970000000000001" font-size="12" fill="#999999">Y</text>
+  <circle cx="165.38" cy="65.38" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <text x="173" y="57" font-size="13" fill="#4a90d9" font-weight="bold">(2, 
8)</text>
+  <circle cx="334.62" cy="234.62" r="5" fill="#2ecc71" stroke="#2ecc71" 
stroke-width="1.5" />
+  <text x="343" y="251" font-size="13" fill="#2ecc71" font-weight="bold">(8, 
2)</text>
+  <path d="M 171 67 C 280 150 280 150 341 231" fill="none" stroke="#2ecc71" 
stroke-width="1.5" stroke-dasharray="4,3" marker-end="url(#arrowResult)" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Swaps the X and Y coordinates of a geometry</text>
+  <rect x="128" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="144" y="266" font-size="13" fill="#333333">Input (x,y)</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result (y,x)</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Force2D/ST_Force2D.svg 
b/docs/image/ST_Force2D/ST_Force2D.svg
new file mode 100644
index 0000000000..8240fc2b0c
--- /dev/null
+++ b/docs/image/ST_Force2D/ST_Force2D.svg
@@ -0,0 +1,27 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Force2D</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="226.22" y="152.86" text-anchor="middle" font-size="14" 
fill="#4a90d9">3D (X, Y, Z)</text>
+  <text x="226.22" y="170.86" text-anchor="middle" font-size="18" 
fill="#2ecc71" font-weight="bold">→</text>
+  <text x="226.22" y="188.86" text-anchor="middle" font-size="14" 
fill="#2ecc71" font-weight="bold">2D (X, Y)</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Forces the geometry into 2D (drops Z / M coordinates)</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Force3D/ST_Force3D.svg 
b/docs/image/ST_Force3D/ST_Force3D.svg
new file mode 100644
index 0000000000..24f1318607
--- /dev/null
+++ b/docs/image/ST_Force3D/ST_Force3D.svg
@@ -0,0 +1,27 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Force3D</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="226.22" y="152.86" text-anchor="middle" font-size="14" 
fill="#4a90d9">2D (X, Y)</text>
+  <text x="226.22" y="170.86" text-anchor="middle" font-size="18" 
fill="#2ecc71" font-weight="bold">→</text>
+  <text x="226.22" y="188.86" text-anchor="middle" font-size="14" 
fill="#2ecc71" font-weight="bold">3D (X, Y, Z)</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Forces the geometry into 3D by adding a Z coordinate</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Force3DM/ST_Force3DM.svg 
b/docs/image/ST_Force3DM/ST_Force3DM.svg
new file mode 100644
index 0000000000..284290eb96
--- /dev/null
+++ b/docs/image/ST_Force3DM/ST_Force3DM.svg
@@ -0,0 +1,27 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Force3DM</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="226.22" y="152.86" text-anchor="middle" font-size="14" 
fill="#4a90d9">2D (X, Y)</text>
+  <text x="226.22" y="170.86" text-anchor="middle" font-size="18" 
fill="#2ecc71" font-weight="bold">→</text>
+  <text x="226.22" y="188.86" text-anchor="middle" font-size="14" 
fill="#2ecc71" font-weight="bold">XYM (X, Y, M)</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Forces the geometry into XYM mode</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Force3DZ/ST_Force3DZ.svg 
b/docs/image/ST_Force3DZ/ST_Force3DZ.svg
new file mode 100644
index 0000000000..4fbaadec51
--- /dev/null
+++ b/docs/image/ST_Force3DZ/ST_Force3DZ.svg
@@ -0,0 +1,27 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Force3DZ</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="226.22" y="152.86" text-anchor="middle" font-size="14" 
fill="#4a90d9">2D (X, Y)</text>
+  <text x="226.22" y="170.86" text-anchor="middle" font-size="18" 
fill="#2ecc71" font-weight="bold">→</text>
+  <text x="226.22" y="188.86" text-anchor="middle" font-size="14" 
fill="#2ecc71" font-weight="bold">3D (X, Y, Z)</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Forces the geometry into XYZ mode (alias of 
ST_Force3D)</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Force4D/ST_Force4D.svg 
b/docs/image/ST_Force4D/ST_Force4D.svg
new file mode 100644
index 0000000000..56fd0047eb
--- /dev/null
+++ b/docs/image/ST_Force4D/ST_Force4D.svg
@@ -0,0 +1,27 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Force4D</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="226.22" y="152.86" text-anchor="middle" font-size="14" 
fill="#4a90d9">2D (X, Y)</text>
+  <text x="226.22" y="170.86" text-anchor="middle" font-size="18" 
fill="#2ecc71" font-weight="bold">→</text>
+  <text x="226.22" y="188.86" text-anchor="middle" font-size="14" 
fill="#2ecc71" font-weight="bold">4D (X, Y, Z, M)</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Forces the geometry into XYZM mode</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ForceCollection/ST_ForceCollection.svg 
b/docs/image/ST_ForceCollection/ST_ForceCollection.svg
new file mode 100644
index 0000000000..5bece82eff
--- /dev/null
+++ b/docs/image/ST_ForceCollection/ST_ForceCollection.svg
@@ -0,0 +1,26 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_ForceCollection</text>
+  <path d="M 112.5 218.75 L 222.5 218.75 L 222.5 108.75 L 112.5 108.75 L 112.5 
218.75 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" stroke-width="2.5" 
fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 277.5 191.25 L 387.5 191.25 L 387.5 81.25 L 277.5 81.25 L 277.5 
191.25 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" stroke-width="2.5" 
fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 112.5 218.75 L 222.5 218.75 L 222.5 108.75 L 112.5 108.75 L 112.5 
218.75 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" stroke-width="2.5" 
fill-rule="evenodd" />
+  <path d="M 277.5 191.25 L 387.5 191.25 L 387.5 81.25 L 277.5 81.25 L 277.5 
191.25 Z" fill="rgba(46,204,113,0.25)" stroke="#27ae60" stroke-width="2.5" 
fill-rule="evenodd" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Converts a geometry into a GeometryCollection</text>
+  <rect x="100" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="116" y="266" font-size="13" fill="#333333">Input Multi</text>
+  <rect x="218" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="234" y="266" font-size="13" fill="#333333">Collection 
elements</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ForcePolygonCCW/ST_ForcePolygonCCW.svg 
b/docs/image/ST_ForcePolygonCCW/ST_ForcePolygonCCW.svg
new file mode 100644
index 0000000000..c903bb7830
--- /dev/null
+++ b/docs/image/ST_ForcePolygonCCW/ST_ForcePolygonCCW.svg
@@ -0,0 +1,26 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_ForcePolygonCCW</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <line x1="240.0" y1="224.3" x2="260.0" y2="224.3" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="368.9" y1="160.0" x2="368.9" y2="140.0" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="260.0" y1="75.7" x2="240.0" y2="75.7" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="131.1" y1="140.0" x2="131.1" y2="160.0" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <text x="226.22" y="164.86" text-anchor="middle" font-size="18" 
font-weight="bold" fill="#2ecc71">CCW ↺</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Sets exterior ring to counter-clockwise orientation</text>
+  <rect x="167" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="183" y="266" font-size="13" fill="#333333">Counter-clockwise</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ForcePolygonCW/ST_ForcePolygonCW.svg 
b/docs/image/ST_ForcePolygonCW/ST_ForcePolygonCW.svg
new file mode 100644
index 0000000000..febd947d70
--- /dev/null
+++ b/docs/image/ST_ForcePolygonCW/ST_ForcePolygonCW.svg
@@ -0,0 +1,26 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_ForcePolygonCW</text>
+  <path d="M 131.08 224.32 L 131.08 75.68 L 368.92 75.68 L 368.92 224.32 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <line x1="131.1" y1="160.0" x2="131.1" y2="140.0" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="240.0" y1="75.7" x2="260.0" y2="75.7" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="368.9" y1="140.0" x2="368.9" y2="160.0" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="260.0" y1="224.3" x2="240.0" y2="224.3" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <text x="226.22" y="164.86" text-anchor="middle" font-size="18" 
font-weight="bold" fill="#2ecc71">CW ↻</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Sets exterior ring to clockwise orientation</text>
+  <rect x="199" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="215" y="266" font-size="13" fill="#333333">Clockwise</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ForceRHR/ST_ForceRHR.svg 
b/docs/image/ST_ForceRHR/ST_ForceRHR.svg
new file mode 100644
index 0000000000..0b4e1be4dd
--- /dev/null
+++ b/docs/image/ST_ForceRHR/ST_ForceRHR.svg
@@ -0,0 +1,26 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_ForceRHR</text>
+  <path d="M 131.08 224.32 L 131.08 75.68 L 368.92 75.68 L 368.92 224.32 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <line x1="131.1" y1="160.0" x2="131.1" y2="140.0" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="240.0" y1="75.7" x2="260.0" y2="75.7" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="368.9" y1="140.0" x2="368.9" y2="160.0" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="260.0" y1="224.3" x2="240.0" y2="224.3" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <text x="226.22" y="164.86" text-anchor="middle" font-size="18" 
font-weight="bold" fill="#2ecc71">CW ↻</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Sets polygon orientation to follow the Right-Hand-Rule 
(clockwise)</text>
+  <rect x="199" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="215" y="266" font-size="13" fill="#333333">Clockwise</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Force_2D/ST_Force_2D.svg 
b/docs/image/ST_Force_2D/ST_Force_2D.svg
new file mode 100644
index 0000000000..06a9c79337
--- /dev/null
+++ b/docs/image/ST_Force_2D/ST_Force_2D.svg
@@ -0,0 +1,27 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Force_2D</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="226.22" y="152.86" text-anchor="middle" font-size="14" 
fill="#4a90d9">3D (X, Y, Z)</text>
+  <text x="226.22" y="170.86" text-anchor="middle" font-size="18" 
fill="#2ecc71" font-weight="bold">→</text>
+  <text x="226.22" y="188.86" text-anchor="middle" font-size="14" 
fill="#2ecc71" font-weight="bold">2D (X, Y)</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Forces the geometry into 2D (drops Z / M coordinates)</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LineFromMultiPoint/ST_LineFromMultiPoint.svg 
b/docs/image/ST_LineFromMultiPoint/ST_LineFromMultiPoint.svg
new file mode 100644
index 0000000000..9b1d1bf621
--- /dev/null
+++ b/docs/image/ST_LineFromMultiPoint/ST_LineFromMultiPoint.svg
@@ -0,0 +1,31 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_LineFromMultiPoint</text>
+  <circle cx="112.5" cy="218.75" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <circle cx="195.0" cy="108.75" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <circle cx="305.0" cy="163.75" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <circle cx="387.5" cy="81.25" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <polyline points="112.5,218.75 195.0,108.75 305.0,163.75 387.5,81.25" 
fill="none" stroke="#2ecc71" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" />
+  <circle cx="112.5" cy="218.75" r="3" fill="#2ecc71" />
+  <circle cx="195.0" cy="108.75" r="3" fill="#2ecc71" />
+  <circle cx="305.0" cy="163.75" r="3" fill="#2ecc71" />
+  <circle cx="387.5" cy="81.25" r="3" fill="#2ecc71" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Creates a LineString from a MultiPoint geometry</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LineMerge/ST_LineMerge.svg 
b/docs/image/ST_LineMerge/ST_LineMerge.svg
new file mode 100644
index 0000000000..abbc29a838
--- /dev/null
+++ b/docs/image/ST_LineMerge/ST_LineMerge.svg
@@ -0,0 +1,36 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_LineMerge</text>
+  <polyline points="92.86,212.86 187.14,118.57" fill="none" stroke="#4a90d9" 
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="6,3" />
+  <circle cx="92.86" cy="212.86" r="3" fill="#4a90d9" />
+  <circle cx="187.14" cy="118.57" r="3" fill="#4a90d9" />
+  <polyline points="187.14,118.57 281.43,181.43" fill="none" stroke="#4a90d9" 
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="6,3" />
+  <circle cx="187.14" cy="118.57" r="3" fill="#4a90d9" />
+  <circle cx="281.43" cy="181.43" r="3" fill="#4a90d9" />
+  <polyline points="281.43,181.43 407.14,87.14" fill="none" stroke="#4a90d9" 
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="6,3" />
+  <circle cx="281.43" cy="181.43" r="3" fill="#4a90d9" />
+  <circle cx="407.14" cy="87.14" r="3" fill="#4a90d9" />
+  <polyline points="92.86,212.86 187.14,118.57 281.43,181.43 407.14,87.14" 
fill="none" stroke="#2ecc71" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" />
+  <circle cx="92.86" cy="212.86" r="3" fill="#2ecc71" />
+  <circle cx="187.14" cy="118.57" r="3" fill="#2ecc71" />
+  <circle cx="281.43" cy="181.43" r="3" fill="#2ecc71" />
+  <circle cx="407.14" cy="87.14" r="3" fill="#2ecc71" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Merges the line work of a MultiLineString into a connected 
line</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LineSegments/ST_LineSegments.svg 
b/docs/image/ST_LineSegments/ST_LineSegments.svg
new file mode 100644
index 0000000000..5ad8093964
--- /dev/null
+++ b/docs/image/ST_LineSegments/ST_LineSegments.svg
@@ -0,0 +1,39 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_LineSegments</text>
+  <polyline points="88.46,203.85 196.15,123.08 303.85,176.92 411.54,96.15" 
fill="none" stroke="#4a90d9" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" stroke-dasharray="6,3" />
+  <circle cx="88.46" cy="203.85" r="3" fill="#4a90d9" />
+  <circle cx="196.15" cy="123.08" r="3" fill="#4a90d9" />
+  <circle cx="303.85" cy="176.92" r="3" fill="#4a90d9" />
+  <circle cx="411.54" cy="96.15" r="3" fill="#4a90d9" />
+  <polyline points="88.46,203.85 196.15,123.08" fill="none" stroke="#2ecc71" 
stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
+  <circle cx="88.46" cy="203.85" r="3" fill="#2ecc71" />
+  <circle cx="196.15" cy="123.08" r="3" fill="#2ecc71" />
+  <text x="142" y="153" text-anchor="middle" font-size="13" fill="#2ecc71" 
font-weight="bold">seg 1</text>
+  <polyline points="196.15,123.08 303.85,176.92" fill="none" stroke="#27ae60" 
stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
+  <circle cx="196.15" cy="123.08" r="3" fill="#27ae60" />
+  <circle cx="303.85" cy="176.92" r="3" fill="#27ae60" />
+  <text x="250" y="140" text-anchor="middle" font-size="13" fill="#27ae60" 
font-weight="bold">seg 2</text>
+  <polyline points="303.85,176.92 411.54,96.15" fill="none" stroke="#1abc9c" 
stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
+  <circle cx="303.85" cy="176.92" r="3" fill="#1abc9c" />
+  <circle cx="411.54" cy="96.15" r="3" fill="#1abc9c" />
+  <text x="358" y="127" text-anchor="middle" font-size="13" fill="#1abc9c" 
font-weight="bold">seg 3</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Splits a LineString into an array of two-point 
segments</text>
+  <rect x="168" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="184" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="238" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="254" y="266" font-size="13" fill="#333333">Segments</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_MakeLine/ST_MakeLine.svg 
b/docs/image/ST_MakeLine/ST_MakeLine.svg
new file mode 100644
index 0000000000..468c491d06
--- /dev/null
+++ b/docs/image/ST_MakeLine/ST_MakeLine.svg
@@ -0,0 +1,31 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_MakeLine</text>
+  <circle cx="88.46" cy="203.85" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <circle cx="196.15" cy="123.08" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <circle cx="303.85" cy="176.92" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <circle cx="411.54" cy="96.15" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <polyline points="88.46,203.85 196.15,123.08 303.85,176.92 411.54,96.15" 
fill="none" stroke="#2ecc71" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" />
+  <circle cx="88.46" cy="203.85" r="3" fill="#2ecc71" />
+  <circle cx="196.15" cy="123.08" r="3" fill="#2ecc71" />
+  <circle cx="303.85" cy="176.92" r="3" fill="#2ecc71" />
+  <circle cx="411.54" cy="96.15" r="3" fill="#2ecc71" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Creates a LineString from Point or MultiPoint 
geometries</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_MakePolygon/ST_MakePolygon.svg 
b/docs/image/ST_MakePolygon/ST_MakePolygon.svg
new file mode 100644
index 0000000000..33104edb89
--- /dev/null
+++ b/docs/image/ST_MakePolygon/ST_MakePolygon.svg
@@ -0,0 +1,29 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_MakePolygon</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <polyline points="131.08,224.32 368.92,224.32 368.92,75.68 131.08,75.68 
131.08,224.32" fill="none" stroke="#4a90d9" stroke-width="2.5" 
stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,3" />
+  <circle cx="131.08" cy="224.32" r="3" fill="#4a90d9" />
+  <circle cx="368.92" cy="224.32" r="3" fill="#4a90d9" />
+  <circle cx="368.92" cy="75.68" r="3" fill="#4a90d9" />
+  <circle cx="131.08" cy="75.68" r="3" fill="#4a90d9" />
+  <circle cx="131.08" cy="224.32" r="3" fill="#4a90d9" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Creates a Polygon from a closed LineString, optionally with 
holes</text>
+  <rect x="100" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="116" y="266" font-size="13" fill="#333333">Input LineString</text>
+  <rect x="258" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="274" y="266" font-size="13" fill="#333333">Result Polygon</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Multi/ST_Multi.svg b/docs/image/ST_Multi/ST_Multi.svg
new file mode 100644
index 0000000000..3b25353149
--- /dev/null
+++ b/docs/image/ST_Multi/ST_Multi.svg
@@ -0,0 +1,22 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Multi</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="226.22" y="164.86" text-anchor="middle" font-size="16" 
font-weight="bold" fill="#2ecc71" font-style="italic">→ Multi*</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Converts a geometry to its Multi* type</text>
+  <rect x="155" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="171" y="266" font-size="13" fill="#333333">Result 
MultiGeometry</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Normalize/ST_Normalize.svg 
b/docs/image/ST_Normalize/ST_Normalize.svg
new file mode 100644
index 0000000000..6a9c363a43
--- /dev/null
+++ b/docs/image/ST_Normalize/ST_Normalize.svg
@@ -0,0 +1,24 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Normalize</text>
+  <path d="M 131.08 75.68 L 368.92 75.68 L 368.92 224.32 L 131.08 224.32 L 
131.08 75.68 Z" fill="rgba(74,144,217,0.15)" stroke="#4a90d9" 
stroke-width="2.5" fill-rule="evenodd" stroke-dasharray="6,3" />
+  <path d="M 131.08 224.32 L 131.08 75.68 L 368.92 75.68 L 368.92 224.32 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Returns the geometry in its canonical normalized form</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Polygon/ST_Polygon.svg 
b/docs/image/ST_Polygon/ST_Polygon.svg
new file mode 100644
index 0000000000..c85edeeb60
--- /dev/null
+++ b/docs/image/ST_Polygon/ST_Polygon.svg
@@ -0,0 +1,29 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Polygon</text>
+  <path d="M 131.08 224.32 L 368.92 224.32 L 368.92 75.68 L 131.08 75.68 L 
131.08 224.32 Z" fill="rgba(46,204,113,0.25)" stroke="#2ecc71" 
stroke-width="2.5" fill-rule="evenodd" />
+  <polyline points="131.08,224.32 368.92,224.32 368.92,75.68 131.08,75.68 
131.08,224.32" fill="none" stroke="#4a90d9" stroke-width="2.5" 
stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,3" />
+  <circle cx="131.08" cy="224.32" r="3" fill="#4a90d9" />
+  <circle cx="368.92" cy="224.32" r="3" fill="#4a90d9" />
+  <circle cx="368.92" cy="75.68" r="3" fill="#4a90d9" />
+  <circle cx="131.08" cy="75.68" r="3" fill="#4a90d9" />
+  <circle cx="131.08" cy="224.32" r="3" fill="#4a90d9" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Creates a Polygon from a LineString and sets the SRID</text>
+  <rect x="100" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="116" y="266" font-size="13" fill="#333333">Input LineString</text>
+  <rect x="258" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="274" y="266" font-size="13" fill="#333333">Result Polygon</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Project/ST_Project.svg 
b/docs/image/ST_Project/ST_Project.svg
new file mode 100644
index 0000000000..5a0c91c3ec
--- /dev/null
+++ b/docs/image/ST_Project/ST_Project.svg
@@ -0,0 +1,37 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Project</text>
+  <polyline points="190.17,234.62 190.17,65.38" fill="none" stroke="#999999" 
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="4,3" />
+  <circle cx="190.17" cy="234.62" r="3" fill="#999999" />
+  <circle cx="190.17" cy="65.38" r="3" fill="#999999" />
+  <text x="178" y="61" font-size="13" fill="#999999" 
font-weight="bold">N</text>
+  <polyline points="190.17,234.62 309.83,114.95" fill="none" stroke="#2ecc71" 
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="5,3" />
+  <circle cx="190.17" cy="234.62" r="3" fill="#2ecc71" />
+  <circle cx="309.83" cy="114.95" r="3" fill="#2ecc71" />
+  <circle cx="190.17" cy="234.62" r="5" fill="#4a90d9" stroke="#4a90d9" 
stroke-width="1.5" />
+  <text x="150" y="251" font-size="13" fill="#4a90d9" 
font-weight="bold">start</text>
+  <circle cx="309.83" cy="114.95" r="8" fill="white" stroke="#2ecc71" 
stroke-width="2.5" />
+  <circle cx="309.83" cy="114.95" r="4" fill="#2ecc71" />
+  <text x="320" y="105" font-size="13" fill="#2ecc71" 
font-weight="bold">projected</text>
+  <text x="260" y="175" font-size="13" fill="#2ecc71" 
font-style="italic">distance</text>
+  <path d="M 190.2 209.6 A 25 25 0 0 1 207.8 216.9" fill="none" 
stroke="#2ecc71" stroke-width="1.5" />
+  <text x="204" y="204" text-anchor="middle" font-size="12" fill="#2ecc71" 
font-style="italic">azimuth</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Projects a point by distance and azimuth to a new 
location</text>
+  <rect x="140" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="156" y="266" font-size="13" fill="#333333">Start point</text>
+  <rect x="258" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="274" y="266" font-size="13" fill="#333333">Projected</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_RemovePoint/ST_RemovePoint.svg 
b/docs/image/ST_RemovePoint/ST_RemovePoint.svg
new file mode 100644
index 0000000000..c42fc73678
--- /dev/null
+++ b/docs/image/ST_RemovePoint/ST_RemovePoint.svg
@@ -0,0 +1,38 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_RemovePoint</text>
+  <polyline points="96.51,213.95 198.84,137.21 250.0,86.05 301.16,188.37 
403.49,111.63" fill="none" stroke="#4a90d9" stroke-width="2.5" 
stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="6,3" />
+  <circle cx="96.51" cy="213.95" r="3" fill="#4a90d9" />
+  <circle cx="198.84" cy="137.21" r="3" fill="#4a90d9" />
+  <circle cx="250.0" cy="86.05" r="3" fill="#4a90d9" />
+  <circle cx="301.16" cy="188.37" r="3" fill="#4a90d9" />
+  <circle cx="403.49" cy="111.63" r="3" fill="#4a90d9" />
+  <polyline points="96.51,213.95 198.84,137.21 301.16,188.37 403.49,111.63" 
fill="none" stroke="#2ecc71" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" />
+  <circle cx="96.51" cy="213.95" r="3" fill="#2ecc71" />
+  <circle cx="198.84" cy="137.21" r="3" fill="#2ecc71" />
+  <circle cx="301.16" cy="188.37" r="3" fill="#2ecc71" />
+  <circle cx="403.49" cy="111.63" r="3" fill="#2ecc71" />
+  <line x1="244.0" y1="80.05" x2="256.0" y2="92.05" stroke="#d94a4a" 
stroke-width="3" stroke-linecap="round" />
+  <line x1="256.0" y1="80.05" x2="244.0" y2="92.05" stroke="#d94a4a" 
stroke-width="3" stroke-linecap="round" />
+  <text x="260" y="78" font-size="13" fill="#d94a4a" 
font-weight="bold">removed</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Removes a point from a LineString at the given index</text>
+  <rect x="133" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="149" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="203" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="219" y="266" font-size="13" fill="#333333">Result</text>
+  <rect x="281" y="255" width="12" height="12" rx="2" fill="#d94a4a" 
stroke="#d94a4a" stroke-width="1" />
+  <text x="297" y="266" font-size="13" fill="#333333">Removed</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_RemoveRepeatedPoints/ST_RemoveRepeatedPoints.svg 
b/docs/image/ST_RemoveRepeatedPoints/ST_RemoveRepeatedPoints.svg
new file mode 100644
index 0000000000..35dced1906
--- /dev/null
+++ b/docs/image/ST_RemoveRepeatedPoints/ST_RemoveRepeatedPoints.svg
@@ -0,0 +1,39 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_RemoveRepeatedPoints</text>
+  <polyline points="102.24,215.67 200.75,117.16 200.75,117.16 299.25,182.84 
299.25,182.84 299.25,182.84 397.76,84.33" fill="none" stroke="#4a90d9" 
stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="6,3" />
+  <circle cx="102.24" cy="215.67" r="3" fill="#4a90d9" />
+  <circle cx="200.75" cy="117.16" r="3" fill="#4a90d9" />
+  <circle cx="200.75" cy="117.16" r="3" fill="#4a90d9" />
+  <circle cx="299.25" cy="182.84" r="3" fill="#4a90d9" />
+  <circle cx="299.25" cy="182.84" r="3" fill="#4a90d9" />
+  <circle cx="299.25" cy="182.84" r="3" fill="#4a90d9" />
+  <circle cx="397.76" cy="84.33" r="3" fill="#4a90d9" />
+  <polyline points="102.24,215.67 200.75,117.16 299.25,182.84 397.76,84.33" 
fill="none" stroke="#2ecc71" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" />
+  <circle cx="102.24" cy="215.67" r="3" fill="#2ecc71" />
+  <circle cx="200.75" cy="117.16" r="3" fill="#2ecc71" />
+  <circle cx="299.25" cy="182.84" r="3" fill="#2ecc71" />
+  <circle cx="397.76" cy="84.33" r="3" fill="#2ecc71" />
+  <circle cx="200.75" cy="117.16" r="9" fill="none" stroke="#d94a4a" 
stroke-width="2" stroke-dasharray="3,2" />
+  <circle cx="299.25" cy="182.84" r="9" fill="none" stroke="#d94a4a" 
stroke-width="2" stroke-dasharray="3,2" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Removes consecutive duplicate points from a geometry</text>
+  <rect x="121" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="137" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="191" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="207" y="266" font-size="13" fill="#333333">Result</text>
+  <rect x="269" y="255" width="12" height="12" rx="2" fill="#d94a4a" 
stroke="#d94a4a" stroke-width="1" />
+  <text x="285" y="266" font-size="13" fill="#333333">Duplicates</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Reverse/ST_Reverse.svg 
b/docs/image/ST_Reverse/ST_Reverse.svg
new file mode 100644
index 0000000000..3140afdcfc
--- /dev/null
+++ b/docs/image/ST_Reverse/ST_Reverse.svg
@@ -0,0 +1,38 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Reverse</text>
+  <polyline points="112.5,218.75 195.0,108.75 305.0,163.75 387.5,81.25" 
fill="none" stroke="#4a90d9" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" stroke-dasharray="6,3" />
+  <circle cx="112.5" cy="218.75" r="3" fill="#4a90d9" />
+  <circle cx="195.0" cy="108.75" r="3" fill="#4a90d9" />
+  <circle cx="305.0" cy="163.75" r="3" fill="#4a90d9" />
+  <circle cx="387.5" cy="81.25" r="3" fill="#4a90d9" />
+  <line x1="157.3" y1="178.9" x2="169.3" y2="162.9" stroke="#4a90d9" 
stroke-width="2" marker-end="url(#arrowA)" />
+  <line x1="235.7" y1="142.5" x2="253.6" y2="151.5" stroke="#4a90d9" 
stroke-width="2" marker-end="url(#arrowA)" />
+  <line x1="347.7" y1="138.1" x2="361.8" y2="123.9" stroke="#4a90d9" 
stroke-width="2" marker-end="url(#arrowA)" />
+  <polyline points="387.5,81.25 305.0,163.75 195.0,108.75 112.5,218.75" 
fill="none" stroke="#2ecc71" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" />
+  <circle cx="387.5" cy="81.25" r="3" fill="#2ecc71" />
+  <circle cx="305.0" cy="163.75" r="3" fill="#2ecc71" />
+  <circle cx="195.0" cy="108.75" r="3" fill="#2ecc71" />
+  <circle cx="112.5" cy="218.75" r="3" fill="#2ecc71" />
+  <line x1="361.8" y1="123.9" x2="347.7" y2="138.1" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="253.6" y1="151.5" x2="235.7" y2="142.5" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <line x1="169.3" y1="162.9" x2="157.3" y2="178.9" stroke="#2ecc71" 
stroke-width="2" marker-end="url(#arrowResult)" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Reverses the vertex order of the geometry</text>
+  <rect x="144" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="160" y="266" font-size="13" fill="#333333">Input order</text>
+  <rect x="262" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="278" y="266" font-size="13" fill="#333333">Reversed</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Segmentize/ST_Segmentize.svg 
b/docs/image/ST_Segmentize/ST_Segmentize.svg
new file mode 100644
index 0000000000..4a55344e0d
--- /dev/null
+++ b/docs/image/ST_Segmentize/ST_Segmentize.svg
@@ -0,0 +1,37 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_Segmentize</text>
+  <polyline points="88.46,150.0 411.54,150.0" fill="none" stroke="#4a90d9" 
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" 
stroke-dasharray="6,3" />
+  <circle cx="88.46" cy="150.0" r="3" fill="#4a90d9" />
+  <circle cx="411.54" cy="150.0" r="3" fill="#4a90d9" />
+  <polyline points="88.46,150.0 169.23,150.0 250.0,150.0 330.77,150.0 
411.54,150.0" fill="none" stroke="#2ecc71" stroke-width="3" 
stroke-linecap="round" stroke-linejoin="round" />
+  <circle cx="88.46" cy="150.0" r="3" fill="#2ecc71" />
+  <circle cx="169.23" cy="150.0" r="3" fill="#2ecc71" />
+  <circle cx="250.0" cy="150.0" r="3" fill="#2ecc71" />
+  <circle cx="330.77" cy="150.0" r="3" fill="#2ecc71" />
+  <circle cx="411.54" cy="150.0" r="3" fill="#2ecc71" />
+  <circle cx="88.46" cy="150.0" r="5" fill="#2ecc71" />
+  <circle cx="169.23" cy="150.0" r="5" fill="#2ecc71" />
+  <circle cx="250.0" cy="150.0" r="5" fill="#2ecc71" />
+  <circle cx="330.77" cy="150.0" r="5" fill="#2ecc71" />
+  <circle cx="411.54" cy="150.0" r="5" fill="#2ecc71" />
+  <text x="129" y="136" text-anchor="middle" font-size="13" fill="#2ecc71" 
font-style="italic">max_length</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Splits long segments to ensure none exceeds the given 
length</text>
+  <rect x="156" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="172" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="226" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="242" y="266" font-size="13" fill="#333333">Segmentized</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_SetPoint/ST_SetPoint.svg 
b/docs/image/ST_SetPoint/ST_SetPoint.svg
new file mode 100644
index 0000000000..2459facfc9
--- /dev/null
+++ b/docs/image/ST_SetPoint/ST_SetPoint.svg
@@ -0,0 +1,37 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_SetPoint</text>
+  <polyline points="96.51,213.95 198.84,137.21 301.16,188.37 403.49,111.63" 
fill="none" stroke="#4a90d9" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" stroke-dasharray="6,3" />
+  <circle cx="96.51" cy="213.95" r="3" fill="#4a90d9" />
+  <circle cx="198.84" cy="137.21" r="3" fill="#4a90d9" />
+  <circle cx="301.16" cy="188.37" r="3" fill="#4a90d9" />
+  <circle cx="403.49" cy="111.63" r="3" fill="#4a90d9" />
+  <polyline points="96.51,213.95 198.84,137.21 301.16,86.05 403.49,111.63" 
fill="none" stroke="#2ecc71" stroke-width="2.5" stroke-linecap="round" 
stroke-linejoin="round" />
+  <circle cx="96.51" cy="213.95" r="3" fill="#2ecc71" />
+  <circle cx="198.84" cy="137.21" r="3" fill="#2ecc71" />
+  <circle cx="301.16" cy="86.05" r="3" fill="#2ecc71" />
+  <circle cx="403.49" cy="111.63" r="3" fill="#2ecc71" />
+  <line x1="301.16" y1="188.37" x2="301.16" y2="86.05" stroke="#d94a4a" 
stroke-width="2" stroke-dasharray="4,3" marker-end="url(#arrowResult)" />
+  <circle cx="301.16" cy="86.05" r="8" fill="white" stroke="#2ecc71" 
stroke-width="2.5" />
+  <circle cx="301.16" cy="86.05" r="4" fill="#2ecc71" />
+  <text x="309" y="204" font-size="13" fill="#d94a4a" 
font-weight="bold">old</text>
+  <text x="311" y="76" font-size="13" fill="#2ecc71" 
font-weight="bold">new</text>
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Replaces a point in a LineString at the given index</text>
+  <rect x="176" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="192" y="266" font-size="13" fill="#333333">Input</text>
+  <rect x="246" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="262" y="266" font-size="13" fill="#333333">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ShiftLongitude/ST_ShiftLongitude.svg 
b/docs/image/ST_ShiftLongitude/ST_ShiftLongitude.svg
new file mode 100644
index 0000000000..2d32b171f1
--- /dev/null
+++ b/docs/image/ST_ShiftLongitude/ST_ShiftLongitude.svg
@@ -0,0 +1,38 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 500 300" width="500" 
height="300" style="background:#ffffff">
+  <defs>
+    <style>
+      text { font-family: 'Segoe UI', Arial, Helvetica, sans-serif; }
+    </style>
+    <marker id="arrowResult" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto">
+      <path d="M0,0 L8,3 L0,6" fill="#2ecc71" />
+    </marker>
+    <marker id="arrowA" markerWidth="7" markerHeight="5" refX="7" refY="2.5" 
orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#4a90d9" />
+    </marker>
+    <marker id="arrowGray" markerWidth="7" markerHeight="5" refX="7" 
refY="2.5" orient="auto">
+      <path d="M0,0 L7,2.5 L0,5" fill="#999999" />
+    </marker>
+  </defs>
+  <text x="250" y="22" text-anchor="middle" font-size="16" font-weight="bold" 
fill="#333333">ST_ShiftLongitude</text>
+  <rect x="80" y="85" width="340" height="140" fill="none" stroke="#cccccc" 
stroke-width="1" />
+  <line x1="80" y1="85" x2="80" y2="225" stroke="#dddddd" stroke-width="1" />
+  <text x="80" y="239" text-anchor="middle" font-size="11" 
fill="#999999">-180°</text>
+  <line x1="165" y1="85" x2="165" y2="225" stroke="#dddddd" stroke-width="1" />
+  <text x="165" y="239" text-anchor="middle" font-size="11" 
fill="#999999">-90°</text>
+  <line x1="250" y1="85" x2="250" y2="225" stroke="#dddddd" stroke-width="1" />
+  <text x="250" y="239" text-anchor="middle" font-size="11" 
fill="#999999">0°</text>
+  <line x1="335" y1="85" x2="335" y2="225" stroke="#dddddd" stroke-width="1" />
+  <text x="335" y="239" text-anchor="middle" font-size="11" 
fill="#999999">90°</text>
+  <line x1="420" y1="85" x2="420" y2="225" stroke="#dddddd" stroke-width="1" />
+  <text x="420" y="239" text-anchor="middle" font-size="11" 
fill="#999999">180°</text>
+  <circle cx="99" cy="155" r="5" fill="#4a90d9" />
+  <text x="99" y="145" text-anchor="middle" font-size="12" fill="#4a90d9" 
font-weight="bold">-160°</text>
+  <circle cx="269" cy="155" r="5" fill="#2ecc71" />
+  <text x="269" y="145" text-anchor="middle" font-size="12" fill="#2ecc71" 
font-weight="bold">200°</text>
+  <path d="M 105 159 C 184 195 184 195 263 159" fill="none" stroke="#2ecc71" 
stroke-width="1.5" stroke-dasharray="4,3" marker-end="url(#arrowResult)" />
+  <text x="250" y="292" text-anchor="middle" font-size="13" fill="#333333" 
font-style="italic">Shifts longitude values between -180..0 and 180..360 
ranges</text>
+  <rect x="88" y="255" width="12" height="12" rx="2" fill="#4a90d9" 
stroke="#4a90d9" stroke-width="1" />
+  <text x="104" y="266" font-size="13" fill="#333333">Input (-180..0)</text>
+  <rect x="238" y="255" width="12" height="12" rx="2" fill="#2ecc71" 
stroke="#2ecc71" stroke-width="1" />
+  <text x="254" y="266" font-size="13" fill="#333333">Shifted (180..360)</text>
+</svg>
\ No newline at end of file

Reply via email to