This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch fix/issue-2678-remaining-visuals
in repository https://gitbox.apache.org/repos/asf/sedona.git

commit a7d2c9ff4fbab4fe9e2f74c3043ef5ef34b6afdc
Author: Jia Yu <[email protected]>
AuthorDate: Wed Mar 4 22:12:41 2026 -0800

    [GH-2678] Add SVG visuals for remaining function categories (Linear 
Referencing, Bounding Box, Aggregate, Clustering, Address)
---
 .../flink/Aggregate-Functions/ST_Envelope_Agg.md   |  2 ++
 .../Aggregate-Functions/ST_Intersection_Agg.md     |  2 ++
 docs/api/flink/Aggregate-Functions/ST_Union_Agg.md |  2 ++
 .../Bounding-Box-Functions/ST_BoundingDiagonal.md  |  2 ++
 .../flink/Bounding-Box-Functions/ST_Envelope.md    |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_Expand.md |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_MMax.md   |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_MMin.md   |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_XMax.md   |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_XMin.md   |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_YMax.md   |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_YMin.md   |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_ZMax.md   |  2 ++
 docs/api/flink/Bounding-Box-Functions/ST_ZMin.md   |  2 ++
 docs/api/flink/Linear-Referencing/ST_AddMeasure.md |  2 ++
 .../Linear-Referencing/ST_InterpolatePoint.md      |  2 ++
 .../Linear-Referencing/ST_IsValidTrajectory.md     |  2 ++
 .../Linear-Referencing/ST_LineInterpolatePoint.md  |  2 ++
 .../flink/Linear-Referencing/ST_LineLocatePoint.md |  2 ++
 .../flink/Linear-Referencing/ST_LineSubstring.md   |  2 ++
 .../api/flink/Linear-Referencing/ST_LocateAlong.md |  2 ++
 .../Aggregate-Functions/ST_Envelope_Agg.md         |  2 ++
 .../Aggregate-Functions/ST_Intersection_Agg.md     |  2 ++
 .../Aggregate-Functions/ST_Union_Agg.md            |  2 ++
 .../Bounding-Box-Functions/ST_BoundingDiagonal.md  |  2 ++
 .../Bounding-Box-Functions/ST_Envelope.md          |  2 ++
 .../Bounding-Box-Functions/ST_Expand.md            |  2 ++
 .../vector-data/Bounding-Box-Functions/ST_XMax.md  |  2 ++
 .../vector-data/Bounding-Box-Functions/ST_XMin.md  |  2 ++
 .../vector-data/Bounding-Box-Functions/ST_YMax.md  |  2 ++
 .../vector-data/Bounding-Box-Functions/ST_YMin.md  |  2 ++
 .../vector-data/Bounding-Box-Functions/ST_ZMax.md  |  2 ++
 .../vector-data/Bounding-Box-Functions/ST_ZMin.md  |  2 ++
 .../Linear-Referencing/ST_LineInterpolatePoint.md  |  2 ++
 .../Linear-Referencing/ST_LineLocatePoint.md       |  2 ++
 .../Linear-Referencing/ST_LineSubstring.md         |  2 ++
 docs/api/sql/Address-Functions/ExpandAddress.md    |  2 ++
 docs/api/sql/Address-Functions/ParseAddress.md     |  2 ++
 docs/api/sql/Aggregate-Functions/ST_Collect_Agg.md |  2 ++
 .../api/sql/Aggregate-Functions/ST_Envelope_Agg.md |  2 ++
 .../sql/Aggregate-Functions/ST_Intersection_Agg.md |  2 ++
 docs/api/sql/Aggregate-Functions/ST_Union_Agg.md   |  2 ++
 .../Bounding-Box-Functions/ST_BoundingDiagonal.md  |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_Envelope.md |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_Expand.md   |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_MMax.md     |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_MMin.md     |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_XMax.md     |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_XMin.md     |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_YMax.md     |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_YMin.md     |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_ZMax.md     |  2 ++
 docs/api/sql/Bounding-Box-Functions/ST_ZMin.md     |  2 ++
 docs/api/sql/Clustering-Functions/ST_DBSCAN.md     |  2 ++
 .../Clustering-Functions/ST_LocalOutlierFactor.md  |  2 ++
 docs/api/sql/Linear-Referencing/ST_AddMeasure.md   |  2 ++
 .../sql/Linear-Referencing/ST_InterpolatePoint.md  |  2 ++
 .../sql/Linear-Referencing/ST_IsValidTrajectory.md |  2 ++
 .../Linear-Referencing/ST_LineInterpolatePoint.md  |  2 ++
 .../sql/Linear-Referencing/ST_LineLocatePoint.md   |  2 ++
 .../api/sql/Linear-Referencing/ST_LineSubstring.md |  2 ++
 docs/api/sql/Linear-Referencing/ST_LocateAlong.md  |  2 ++
 docs/image/ExpandAddress/ExpandAddress.svg         | 12 +++++++++
 docs/image/ParseAddress/ParseAddress.svg           | 14 +++++++++++
 docs/image/ST_AddMeasure/ST_AddMeasure.svg         | 14 +++++++++++
 .../ST_BoundingDiagonal/ST_BoundingDiagonal.svg    | 15 +++++++++++
 docs/image/ST_Collect_Agg/ST_Collect_Agg.svg       | 15 +++++++++++
 docs/image/ST_DBSCAN/ST_DBSCAN.svg                 | 29 ++++++++++++++++++++++
 docs/image/ST_Envelope/ST_Envelope.svg             | 11 ++++++++
 docs/image/ST_Envelope_Agg/ST_Envelope_Agg.svg     | 13 ++++++++++
 docs/image/ST_Expand/ST_Expand.svg                 | 14 +++++++++++
 .../ST_InterpolatePoint/ST_InterpolatePoint.svg    | 20 +++++++++++++++
 .../ST_Intersection_Agg/ST_Intersection_Agg.svg    | 13 ++++++++++
 .../ST_IsValidTrajectory/ST_IsValidTrajectory.svg  | 25 +++++++++++++++++++
 .../ST_LineInterpolatePoint.svg                    | 16 ++++++++++++
 .../ST_LineLocatePoint/ST_LineLocatePoint.svg      | 21 ++++++++++++++++
 docs/image/ST_LineSubstring/ST_LineSubstring.svg   | 15 +++++++++++
 .../ST_LocalOutlierFactor.svg                      | 28 +++++++++++++++++++++
 docs/image/ST_LocateAlong/ST_LocateAlong.svg       | 18 ++++++++++++++
 docs/image/ST_MMax/ST_MMax.svg                     | 12 +++++++++
 docs/image/ST_MMin/ST_MMin.svg                     | 12 +++++++++
 docs/image/ST_Union_Agg/ST_Union_Agg.svg           | 13 ++++++++++
 docs/image/ST_XMax/ST_XMax.svg                     | 12 +++++++++
 docs/image/ST_XMin/ST_XMin.svg                     | 12 +++++++++
 docs/image/ST_YMax/ST_YMax.svg                     | 12 +++++++++
 docs/image/ST_YMin/ST_YMin.svg                     | 12 +++++++++
 docs/image/ST_ZMax/ST_ZMax.svg                     | 12 +++++++++
 docs/image/ST_ZMin/ST_ZMin.svg                     | 12 +++++++++
 88 files changed, 526 insertions(+)

diff --git a/docs/api/flink/Aggregate-Functions/ST_Envelope_Agg.md 
b/docs/api/flink/Aggregate-Functions/ST_Envelope_Agg.md
index eb5534f275..6230444b8a 100644
--- a/docs/api/flink/Aggregate-Functions/ST_Envelope_Agg.md
+++ b/docs/api/flink/Aggregate-Functions/ST_Envelope_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the entire envelope boundary of all geometries in A. 
Empty geometries and null values are skipped. If all inputs are empty or null, 
the result is null. This behavior is consistent with PostGIS's `ST_Extent`.
 
+![ST_Envelope_Agg](../../../image/ST_Envelope_Agg/ST_Envelope_Agg.svg 
"ST_Envelope_Agg")
+
 Format: `ST_Envelope_Agg (A: geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Aggregate-Functions/ST_Intersection_Agg.md 
b/docs/api/flink/Aggregate-Functions/ST_Intersection_Agg.md
index 036018a8f2..9159d35c22 100644
--- a/docs/api/flink/Aggregate-Functions/ST_Intersection_Agg.md
+++ b/docs/api/flink/Aggregate-Functions/ST_Intersection_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the polygon intersection of all polygons in A
 
+![ST_Intersection_Agg](../../../image/ST_Intersection_Agg/ST_Intersection_Agg.svg
 "ST_Intersection_Agg")
+
 Format: `ST_Intersection_Agg (A: geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Aggregate-Functions/ST_Union_Agg.md 
b/docs/api/flink/Aggregate-Functions/ST_Union_Agg.md
index 46b04d2b46..888b3987f1 100644
--- a/docs/api/flink/Aggregate-Functions/ST_Union_Agg.md
+++ b/docs/api/flink/Aggregate-Functions/ST_Union_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the polygon union of all polygons in A. All inputs must 
be polygons.
 
+![ST_Union_Agg](../../../image/ST_Union_Agg/ST_Union_Agg.svg "ST_Union_Agg")
+
 Format: `ST_Union_Agg (A: geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_BoundingDiagonal.md 
b/docs/api/flink/Bounding-Box-Functions/ST_BoundingDiagonal.md
index c2c9050aaa..e0fa683b64 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_BoundingDiagonal.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_BoundingDiagonal.md
@@ -23,6 +23,8 @@ Introduction: Returns a linestring spanning minimum and 
maximum values of each d
 If an empty geometry is provided, the returned LineString is also empty.
 If a single vertex (POINT) is provided, the returned LineString has both the 
start and end points same as the points coordinates
 
+![ST_BoundingDiagonal](../../../image/ST_BoundingDiagonal/ST_BoundingDiagonal.svg
 "ST_BoundingDiagonal")
+
 Format: `ST_BoundingDiagonal(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_Envelope.md 
b/docs/api/flink/Bounding-Box-Functions/ST_Envelope.md
index 2ba6fce2d5..452d88a1de 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_Envelope.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_Envelope.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the envelope boundary of A
 
+![ST_Envelope](../../../image/ST_Envelope/ST_Envelope.svg "ST_Envelope")
+
 Format: `ST_Envelope (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_Expand.md 
b/docs/api/flink/Bounding-Box-Functions/ST_Expand.md
index 62f25bb7da..2d44fd8bc5 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_Expand.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_Expand.md
@@ -31,6 +31,8 @@ Introduction: Returns a geometry expanded from the bounding 
box of the input. Th
     2. For XYZ geometries, specifying only `deltaX` and `deltaY` will preserve 
the original Z dimension.
     3. If the input geometry has an M dimension then using this function will 
drop the said M dimension.
 
+![ST_Expand](../../../image/ST_Expand/ST_Expand.svg "ST_Expand")
+
 Format:
 
 `ST_Expand(geometry: Geometry, uniformDelta: Double)`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_MMax.md 
b/docs/api/flink/Bounding-Box-Functions/ST_MMax.md
index 3b076b68b0..57451a7e2b 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_MMax.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_MMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns M maxima of the given geometry or null if there is no M 
coordinate.
 
+![ST_MMax](../../../image/ST_MMax/ST_MMax.svg "ST_MMax")
+
 Format: `ST_MMax(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_MMin.md 
b/docs/api/flink/Bounding-Box-Functions/ST_MMin.md
index ea71a580ca..1fe9a04047 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_MMin.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_MMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns M minima of the given geometry or null if there is no M 
coordinate.
 
+![ST_MMin](../../../image/ST_MMin/ST_MMin.svg "ST_MMin")
+
 Format: `ST_MMin(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_XMax.md 
b/docs/api/flink/Bounding-Box-Functions/ST_XMax.md
index 5cea01a92a..d14ed536ae 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_XMax.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_XMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the maximum X coordinate of a geometry
 
+![ST_XMax](../../../image/ST_XMax/ST_XMax.svg "ST_XMax")
+
 Format: `ST_XMax (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_XMin.md 
b/docs/api/flink/Bounding-Box-Functions/ST_XMin.md
index 7acbcd7a25..b21d941b19 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_XMin.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_XMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the minimum X coordinate of a geometry
 
+![ST_XMin](../../../image/ST_XMin/ST_XMin.svg "ST_XMin")
+
 Format: `ST_XMin (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_YMax.md 
b/docs/api/flink/Bounding-Box-Functions/ST_YMax.md
index 6e141d8e57..efb8657a48 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_YMax.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_YMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the minimum Y coordinate of A
 
+![ST_YMax](../../../image/ST_YMax/ST_YMax.svg "ST_YMax")
+
 Format: `ST_YMax (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_YMin.md 
b/docs/api/flink/Bounding-Box-Functions/ST_YMin.md
index f992638b95..8473b82323 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_YMin.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_YMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the minimum Y coordinate of A
 
+![ST_YMin](../../../image/ST_YMin/ST_YMin.svg "ST_YMin")
+
 Format: `ST_Y_Min (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_ZMax.md 
b/docs/api/flink/Bounding-Box-Functions/ST_ZMax.md
index 313f31afa3..06e15f8505 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_ZMax.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_ZMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns Z maxima of the given geometry or null if there is no Z 
coordinate.
 
+![ST_ZMax](../../../image/ST_ZMax/ST_ZMax.svg "ST_ZMax")
+
 Format: `ST_ZMax(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Bounding-Box-Functions/ST_ZMin.md 
b/docs/api/flink/Bounding-Box-Functions/ST_ZMin.md
index 203d1df4a6..b193eeceeb 100644
--- a/docs/api/flink/Bounding-Box-Functions/ST_ZMin.md
+++ b/docs/api/flink/Bounding-Box-Functions/ST_ZMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns Z minima of the given geometry or null if there is no Z 
coordinate.
 
+![ST_ZMin](../../../image/ST_ZMin/ST_ZMin.svg "ST_ZMin")
+
 Format: `ST_ZMin(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Linear-Referencing/ST_AddMeasure.md 
b/docs/api/flink/Linear-Referencing/ST_AddMeasure.md
index b67d7f4e2b..7e5a37ed60 100644
--- a/docs/api/flink/Linear-Referencing/ST_AddMeasure.md
+++ b/docs/api/flink/Linear-Referencing/ST_AddMeasure.md
@@ -21,6 +21,8 @@
 
 Introduction: Computes a new geometry with measure (M) values linearly 
interpolated between start and end points. For geometries lacking M dimensions, 
M values are added. Existing M values are overwritten by the new values. 
Applies only to LineString and MultiLineString inputs.
 
+![ST_AddMeasure](../../../image/ST_AddMeasure/ST_AddMeasure.svg 
"ST_AddMeasure")
+
 Format: `ST_AddMeasure(geom: Geometry, measureStart: Double, measureEnd: 
Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Linear-Referencing/ST_InterpolatePoint.md 
b/docs/api/flink/Linear-Referencing/ST_InterpolatePoint.md
index 7db21af1e9..f2c83ce576 100644
--- a/docs/api/flink/Linear-Referencing/ST_InterpolatePoint.md
+++ b/docs/api/flink/Linear-Referencing/ST_InterpolatePoint.md
@@ -24,6 +24,8 @@ Introduction: Returns the interpolated measure value of a 
linear measured LineSt
 !!!Note
     Make sure that both geometries have the same SRID, otherwise the function 
will throw an IllegalArgumentException.
 
+![ST_InterpolatePoint](../../../image/ST_InterpolatePoint/ST_InterpolatePoint.svg
 "ST_InterpolatePoint")
+
 Format: `ST_InterpolatePoint(linestringM: Geometry, point: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Linear-Referencing/ST_IsValidTrajectory.md 
b/docs/api/flink/Linear-Referencing/ST_IsValidTrajectory.md
index 2498ca0d28..3930692e88 100644
--- a/docs/api/flink/Linear-Referencing/ST_IsValidTrajectory.md
+++ b/docs/api/flink/Linear-Referencing/ST_IsValidTrajectory.md
@@ -21,6 +21,8 @@
 
 Introduction: This function checks if a geometry is a valid trajectory 
representation. For a trajectory to be considered valid, it must be a 
LineString that includes measure (M) values. The key requirement is that the M 
values increase from one vertex to the next as you move along the line.
 
+![ST_IsValidTrajectory](../../../image/ST_IsValidTrajectory/ST_IsValidTrajectory.svg
 "ST_IsValidTrajectory")
+
 Format: `ST_IsValidTrajectory(geom: Geometry)`
 
 Return type: `Boolean`
diff --git a/docs/api/flink/Linear-Referencing/ST_LineInterpolatePoint.md 
b/docs/api/flink/Linear-Referencing/ST_LineInterpolatePoint.md
index 0f2f788ecb..b7b56cfae8 100644
--- a/docs/api/flink/Linear-Referencing/ST_LineInterpolatePoint.md
+++ b/docs/api/flink/Linear-Referencing/ST_LineInterpolatePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a point interpolated along a line. First argument must 
be a LINESTRING. Second argument is a Double between 0 and 1 representing 
fraction of total linestring length the point has to be located.
 
+![ST_LineInterpolatePoint](../../../image/ST_LineInterpolatePoint/ST_LineInterpolatePoint.svg
 "ST_LineInterpolatePoint")
+
 Format: `ST_LineInterpolatePoint (geom: Geometry, fraction: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Linear-Referencing/ST_LineLocatePoint.md 
b/docs/api/flink/Linear-Referencing/ST_LineLocatePoint.md
index e745928553..218d70fe2d 100644
--- a/docs/api/flink/Linear-Referencing/ST_LineLocatePoint.md
+++ b/docs/api/flink/Linear-Referencing/ST_LineLocatePoint.md
@@ -22,6 +22,8 @@
 Introduction: Returns a double between 0 and 1, representing the location of 
the closest point on the LineString as a fraction of its total length.
 The first argument must be a LINESTRING, and the second argument is a POINT 
geometry.
 
+![ST_LineLocatePoint](../../../image/ST_LineLocatePoint/ST_LineLocatePoint.svg 
"ST_LineLocatePoint")
+
 Format: `ST_LineLocatePoint(linestring: Geometry, point: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/flink/Linear-Referencing/ST_LineSubstring.md 
b/docs/api/flink/Linear-Referencing/ST_LineSubstring.md
index 5547bcf425..d7e7205257 100644
--- a/docs/api/flink/Linear-Referencing/ST_LineSubstring.md
+++ b/docs/api/flink/Linear-Referencing/ST_LineSubstring.md
@@ -21,6 +21,8 @@
 
 Introduction: Return a linestring being a substring of the input one starting 
and ending at the given fractions of total 2d length. Second and third 
arguments are Double values between 0 and 1. This only works with LINESTRINGs.
 
+![ST_LineSubstring](../../../image/ST_LineSubstring/ST_LineSubstring.svg 
"ST_LineSubstring")
+
 Format: `ST_LineSubstring (geom: Geometry, startfraction: Double, endfraction: 
Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/flink/Linear-Referencing/ST_LocateAlong.md 
b/docs/api/flink/Linear-Referencing/ST_LocateAlong.md
index 32521f7508..00b17f6de0 100644
--- a/docs/api/flink/Linear-Referencing/ST_LocateAlong.md
+++ b/docs/api/flink/Linear-Referencing/ST_LocateAlong.md
@@ -25,6 +25,8 @@ Additionally, an optional `offset` parameter can shift the 
resulting points left
 
 This allows identifying precise locations along a measured linear geometry 
based on supplied measure values, with the ability to offset the output points 
if needed.
 
+![ST_LocateAlong](../../../image/ST_LocateAlong/ST_LocateAlong.svg 
"ST_LocateAlong")
+
 Format:
 
 `ST_LocateAlong(linear: Geometry, measure: Double, offset: Double)`
diff --git 
a/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Envelope_Agg.md 
b/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Envelope_Agg.md
index 7474884751..a0ae0b4211 100644
--- a/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Envelope_Agg.md
+++ b/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Envelope_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the entire envelope boundary of all geometries in A. 
Empty geometries and null values are skipped. If all inputs are empty or null, 
the result is null. This behavior is consistent with PostGIS's `ST_Extent`.
 
+![ST_Envelope_Agg](../../../../image/ST_Envelope_Agg/ST_Envelope_Agg.svg 
"ST_Envelope_Agg")
+
 Format: `ST_Envelope_Agg (A:geometryColumn)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Intersection_Agg.md 
b/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Intersection_Agg.md
index f9a8302e8e..eefa135c4a 100644
--- a/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Intersection_Agg.md
+++ b/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Intersection_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the polygon intersection of all polygons in A
 
+![ST_Intersection_Agg](../../../../image/ST_Intersection_Agg/ST_Intersection_Agg.svg
 "ST_Intersection_Agg")
+
 Format: `ST_Intersection_Agg (A:geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Union_Agg.md 
b/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Union_Agg.md
index 444fc2c7c1..6ad60d79ad 100644
--- a/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Union_Agg.md
+++ b/docs/api/snowflake/vector-data/Aggregate-Functions/ST_Union_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the polygon union of all polygons in A
 
+![ST_Union_Agg](../../../../image/ST_Union_Agg/ST_Union_Agg.svg "ST_Union_Agg")
+
 Format: `ST_Union_Agg (A:geometryColumn)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_BoundingDiagonal.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_BoundingDiagonal.md
index 0fddf08c21..f79ca48b90 100644
--- 
a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_BoundingDiagonal.md
+++ 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_BoundingDiagonal.md
@@ -23,6 +23,8 @@ Introduction: Returns a linestring spanning minimum and 
maximum values of each d
 If an empty geometry is provided, the returned LineString is also empty.
 If a single vertex (POINT) is provided, the returned LineString has both the 
start and end points same as the points coordinates
 
+![ST_BoundingDiagonal](../../../../image/ST_BoundingDiagonal/ST_BoundingDiagonal.svg
 "ST_BoundingDiagonal")
+
 Format: `ST_BoundingDiagonal(geom: Geometry)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Envelope.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Envelope.md
index 65682de0dd..8f9933d3ff 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Envelope.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Envelope.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the envelope boundary of A
 
+![ST_Envelope](../../../../image/ST_Envelope/ST_Envelope.svg "ST_Envelope")
+
 Format: `ST_Envelope (A:geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Expand.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Expand.md
index 8301d40f43..bc6e8dee02 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Expand.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_Expand.md
@@ -24,6 +24,8 @@ Introduction: Returns a geometry expanded from the bounding 
box of the input. Th
 1. By individual axis using `deltaX`, `deltaY`, or `deltaZ` parameters.
 2. Uniformly across all axes using the `uniformDelta` parameter.
 
+![ST_Expand](../../../../image/ST_Expand/ST_Expand.svg "ST_Expand")
+
 Format:
 
 `ST_Expand(geometry: Geometry, uniformDelta: Double)`
diff --git a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMax.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMax.md
index 504cc8b152..de850e2ef7 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMax.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the maximum X coordinate of a geometry
 
+![ST_XMax](../../../../image/ST_XMax/ST_XMax.svg "ST_XMax")
+
 Format: `ST_XMax (A:geometry)`
 
 Return type: `Double`
diff --git a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMin.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMin.md
index b5c4e4ac13..586e8c1d32 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMin.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_XMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the minimum X coordinate of a geometry
 
+![ST_XMin](../../../../image/ST_XMin/ST_XMin.svg "ST_XMin")
+
 Format: `ST_XMin (A:geometry)`
 
 Return type: `Double`
diff --git a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMax.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMax.md
index 8dad2ccb5e..c73c094424 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMax.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the minimum Y coordinate of A
 
+![ST_YMax](../../../../image/ST_YMax/ST_YMax.svg "ST_YMax")
+
 Format: `ST_YMax (A:geometry)`
 
 Return type: `Double`
diff --git a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMin.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMin.md
index fed6e1eac3..8dbcd93617 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMin.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_YMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the minimum Y coordinate of A
 
+![ST_YMin](../../../../image/ST_YMin/ST_YMin.svg "ST_YMin")
+
 Format: `ST_Y_Min (A:geometry)`
 
 Return type: `Double`
diff --git a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMax.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMax.md
index 88316c59a8..837b92f96c 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMax.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns Z maxima of the given geometry or null if there is no Z 
coordinate.
 
+![ST_ZMax](../../../../image/ST_ZMax/ST_ZMax.svg "ST_ZMax")
+
 Format: `ST_ZMax(geom: geometry)`
 
 Return type: `Double`
diff --git a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMin.md 
b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMin.md
index 757dd38dca..b6612a9ad0 100644
--- a/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMin.md
+++ b/docs/api/snowflake/vector-data/Bounding-Box-Functions/ST_ZMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns Z minima of the given geometry or null if there is no Z 
coordinate.
 
+![ST_ZMin](../../../../image/ST_ZMin/ST_ZMin.svg "ST_ZMin")
+
 Format: `ST_ZMin(geom: geometry)`
 
 Return type: `Double`
diff --git 
a/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineInterpolatePoint.md 
b/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineInterpolatePoint.md
index 3b3529e269..2513a35764 100644
--- 
a/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineInterpolatePoint.md
+++ 
b/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineInterpolatePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a point interpolated along a line. First argument must 
be a LINESTRING. Second argument is a Double between 0 and 1 representing 
fraction of total linestring length the point has to be located.
 
+![ST_LineInterpolatePoint](../../../../image/ST_LineInterpolatePoint/ST_LineInterpolatePoint.svg
 "ST_LineInterpolatePoint")
+
 Format: `ST_LineInterpolatePoint (geom: geometry, fraction: Double)`
 
 Return type: `Geometry`
diff --git 
a/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineLocatePoint.md 
b/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineLocatePoint.md
index 8ee043defd..442457042d 100644
--- a/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineLocatePoint.md
+++ b/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineLocatePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a double between 0 and 1, representing the location of 
the closest point on the LineString as a fraction of its total length. The 
first argument must be a LINESTRING, and the second argument is a POINT 
geometry.
 
+![ST_LineLocatePoint](../../../../image/ST_LineLocatePoint/ST_LineLocatePoint.svg
 "ST_LineLocatePoint")
+
 Format: `ST_LineLocatePoint(linestring: Geometry, point: Geometry)`
 
 Return type: `Double`
diff --git 
a/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineSubstring.md 
b/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineSubstring.md
index 8e0e648caf..3a1d257f5b 100644
--- a/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineSubstring.md
+++ b/docs/api/snowflake/vector-data/Linear-Referencing/ST_LineSubstring.md
@@ -21,6 +21,8 @@
 
 Introduction: Return a linestring being a substring of the input one starting 
and ending at the given fractions of total 2d length. Second and third 
arguments are Double values between 0 and 1. This only works with LINESTRINGs.
 
+![ST_LineSubstring](../../../../image/ST_LineSubstring/ST_LineSubstring.svg 
"ST_LineSubstring")
+
 Format: `ST_LineSubstring (geom: geometry, startfraction: Double, endfraction: 
Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Address-Functions/ExpandAddress.md 
b/docs/api/sql/Address-Functions/ExpandAddress.md
index 9d4c8f616c..6849ff1149 100644
--- a/docs/api/sql/Address-Functions/ExpandAddress.md
+++ b/docs/api/sql/Address-Functions/ExpandAddress.md
@@ -31,6 +31,8 @@ The data directory can be configured via 
`spark.sedona.libpostal.dataDir`. You c
 
 To prepare the libpostal data for a remote filesystem, first download it to a 
local machine by following the [libpostal installation 
instructions](https://github.com/openvenues/libpostal#installation-maclinux). 
After installation, the data files will be in the directory you specified 
during setup (commonly `/tmp/libpostal/`). Then upload them to your remote 
storage.
 
+![ExpandAddress](../../../image/ExpandAddress/ExpandAddress.svg 
"ExpandAddress")
+
 Format: `ExpandAddress (address: String)`
 
 Return type: `Array<String>`
diff --git a/docs/api/sql/Address-Functions/ParseAddress.md 
b/docs/api/sql/Address-Functions/ParseAddress.md
index a609d4be56..12fd01c9b5 100644
--- a/docs/api/sql/Address-Functions/ParseAddress.md
+++ b/docs/api/sql/Address-Functions/ParseAddress.md
@@ -31,6 +31,8 @@ The data directory can be configured via 
`spark.sedona.libpostal.dataDir`. You c
 
 To prepare the libpostal data for a remote filesystem, first download it to a 
local machine by following the [libpostal installation 
instructions](https://github.com/openvenues/libpostal#installation-maclinux). 
After installation, the data files will be in the directory you specified 
during setup (commonly `/tmp/libpostal/`). Then upload them to your remote 
storage.
 
+![ParseAddress](../../../image/ParseAddress/ParseAddress.svg "ParseAddress")
+
 Format: `ParseAddress (address: String)`
 
 Return type: `Array<Struct<label: String, value: String>>`
diff --git a/docs/api/sql/Aggregate-Functions/ST_Collect_Agg.md 
b/docs/api/sql/Aggregate-Functions/ST_Collect_Agg.md
index 51b6b7b5ea..5f8081f75f 100644
--- a/docs/api/sql/Aggregate-Functions/ST_Collect_Agg.md
+++ b/docs/api/sql/Aggregate-Functions/ST_Collect_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Collects all geometries in a geometry column into a single 
multi-geometry (MultiPoint, MultiLineString, MultiPolygon, or 
GeometryCollection). Unlike `ST_Union_Agg`, this function does not dissolve 
boundaries between geometries - it simply collects them into a multi-geometry.
 
+![ST_Collect_Agg](../../../image/ST_Collect_Agg/ST_Collect_Agg.svg 
"ST_Collect_Agg")
+
 Format: `ST_Collect_Agg (A: geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Aggregate-Functions/ST_Envelope_Agg.md 
b/docs/api/sql/Aggregate-Functions/ST_Envelope_Agg.md
index d3e79a2f52..3c89d4e199 100644
--- a/docs/api/sql/Aggregate-Functions/ST_Envelope_Agg.md
+++ b/docs/api/sql/Aggregate-Functions/ST_Envelope_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the entire envelope boundary of all geometries in A. 
Empty geometries and null values are skipped. If all inputs are empty or null, 
the result is null. This behavior is consistent with PostGIS's `ST_Extent`.
 
+![ST_Envelope_Agg](../../../image/ST_Envelope_Agg/ST_Envelope_Agg.svg 
"ST_Envelope_Agg")
+
 Format: `ST_Envelope_Agg (A: geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Aggregate-Functions/ST_Intersection_Agg.md 
b/docs/api/sql/Aggregate-Functions/ST_Intersection_Agg.md
index a0bb76caa3..ee2e5b94f4 100644
--- a/docs/api/sql/Aggregate-Functions/ST_Intersection_Agg.md
+++ b/docs/api/sql/Aggregate-Functions/ST_Intersection_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the polygon intersection of all polygons in A
 
+![ST_Intersection_Agg](../../../image/ST_Intersection_Agg/ST_Intersection_Agg.svg
 "ST_Intersection_Agg")
+
 Format: `ST_Intersection_Agg (A: geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Aggregate-Functions/ST_Union_Agg.md 
b/docs/api/sql/Aggregate-Functions/ST_Union_Agg.md
index f8cb643289..1d4e9133cc 100644
--- a/docs/api/sql/Aggregate-Functions/ST_Union_Agg.md
+++ b/docs/api/sql/Aggregate-Functions/ST_Union_Agg.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the polygon union of all polygons in A
 
+![ST_Union_Agg](../../../image/ST_Union_Agg/ST_Union_Agg.svg "ST_Union_Agg")
+
 Format: `ST_Union_Agg (A: geometryColumn)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_BoundingDiagonal.md 
b/docs/api/sql/Bounding-Box-Functions/ST_BoundingDiagonal.md
index a3e8c80d68..0fd6f30af5 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_BoundingDiagonal.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_BoundingDiagonal.md
@@ -23,6 +23,8 @@ Introduction: Returns a linestring spanning minimum and 
maximum values of each d
 If an empty geometry is provided, the returned LineString is also empty.
 If a single vertex (POINT) is provided, the returned LineString has both the 
start and end points same as the points coordinates
 
+![ST_BoundingDiagonal](../../../image/ST_BoundingDiagonal/ST_BoundingDiagonal.svg
 "ST_BoundingDiagonal")
+
 Format: `ST_BoundingDiagonal(geom: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_Envelope.md 
b/docs/api/sql/Bounding-Box-Functions/ST_Envelope.md
index a0b088a82b..21da012306 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_Envelope.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_Envelope.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the envelope boundary of A
 
+![ST_Envelope](../../../image/ST_Envelope/ST_Envelope.svg "ST_Envelope")
+
 Format: `ST_Envelope (A: Geometry)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_Expand.md 
b/docs/api/sql/Bounding-Box-Functions/ST_Expand.md
index 62f25bb7da..2d44fd8bc5 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_Expand.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_Expand.md
@@ -31,6 +31,8 @@ Introduction: Returns a geometry expanded from the bounding 
box of the input. Th
     2. For XYZ geometries, specifying only `deltaX` and `deltaY` will preserve 
the original Z dimension.
     3. If the input geometry has an M dimension then using this function will 
drop the said M dimension.
 
+![ST_Expand](../../../image/ST_Expand/ST_Expand.svg "ST_Expand")
+
 Format:
 
 `ST_Expand(geometry: Geometry, uniformDelta: Double)`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_MMax.md 
b/docs/api/sql/Bounding-Box-Functions/ST_MMax.md
index 3b076b68b0..57451a7e2b 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_MMax.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_MMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns M maxima of the given geometry or null if there is no M 
coordinate.
 
+![ST_MMax](../../../image/ST_MMax/ST_MMax.svg "ST_MMax")
+
 Format: `ST_MMax(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_MMin.md 
b/docs/api/sql/Bounding-Box-Functions/ST_MMin.md
index ea71a580ca..1fe9a04047 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_MMin.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_MMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns M minima of the given geometry or null if there is no M 
coordinate.
 
+![ST_MMin](../../../image/ST_MMin/ST_MMin.svg "ST_MMin")
+
 Format: `ST_MMin(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_XMax.md 
b/docs/api/sql/Bounding-Box-Functions/ST_XMax.md
index d516cfd189..21405f7c43 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_XMax.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_XMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the maximum X coordinate of a geometry
 
+![ST_XMax](../../../image/ST_XMax/ST_XMax.svg "ST_XMax")
+
 Format: `ST_XMax (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_XMin.md 
b/docs/api/sql/Bounding-Box-Functions/ST_XMin.md
index 1df90c9742..f138e55f8a 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_XMin.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_XMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the minimum X coordinate of a geometry
 
+![ST_XMin](../../../image/ST_XMin/ST_XMin.svg "ST_XMin")
+
 Format: `ST_XMin (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_YMax.md 
b/docs/api/sql/Bounding-Box-Functions/ST_YMax.md
index 2bc562d107..803e85cda6 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_YMax.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_YMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the minimum Y coordinate of A
 
+![ST_YMax](../../../image/ST_YMax/ST_YMax.svg "ST_YMax")
+
 Format: `ST_YMax (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_YMin.md 
b/docs/api/sql/Bounding-Box-Functions/ST_YMin.md
index 7981058534..16254a5ebc 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_YMin.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_YMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Return the minimum Y coordinate of A
 
+![ST_YMin](../../../image/ST_YMin/ST_YMin.svg "ST_YMin")
+
 Format: `ST_Y_Min (A: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_ZMax.md 
b/docs/api/sql/Bounding-Box-Functions/ST_ZMax.md
index 0bf747ba98..4f23100bd6 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_ZMax.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_ZMax.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns Z maxima of the given geometry or null if there is no Z 
coordinate.
 
+![ST_ZMax](../../../image/ST_ZMax/ST_ZMax.svg "ST_ZMax")
+
 Format: `ST_ZMax(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Bounding-Box-Functions/ST_ZMin.md 
b/docs/api/sql/Bounding-Box-Functions/ST_ZMin.md
index 1ab9431e22..391717a3f8 100644
--- a/docs/api/sql/Bounding-Box-Functions/ST_ZMin.md
+++ b/docs/api/sql/Bounding-Box-Functions/ST_ZMin.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns Z minima of the given geometry or null if there is no Z 
coordinate.
 
+![ST_ZMin](../../../image/ST_ZMin/ST_ZMin.svg "ST_ZMin")
+
 Format: `ST_ZMin(geom: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Clustering-Functions/ST_DBSCAN.md 
b/docs/api/sql/Clustering-Functions/ST_DBSCAN.md
index e0075b85ac..cadd266583 100644
--- a/docs/api/sql/Clustering-Functions/ST_DBSCAN.md
+++ b/docs/api/sql/Clustering-Functions/ST_DBSCAN.md
@@ -27,6 +27,8 @@ Returns a struct containing the cluster ID and a boolean 
indicating if the recor
 - `minPoints` is the minimum number of neighbors a single record must have to 
form a cluster.
 - `useSpheroid` is whether to use ST_DistanceSpheroid or ST_Distance as the 
distance metric.
 
+![ST_DBSCAN](../../../image/ST_DBSCAN/ST_DBSCAN.svg "ST_DBSCAN")
+
 Format: `ST_DBSCAN(geom: Geometry, epsilon: Double, minPoints: Integer, 
useSpheroid: Boolean)`
 
 Return type: `Struct<isCore: Boolean, cluster: Long>`
diff --git a/docs/api/sql/Clustering-Functions/ST_LocalOutlierFactor.md 
b/docs/api/sql/Clustering-Functions/ST_LocalOutlierFactor.md
index 964588f2c1..617a342828 100644
--- a/docs/api/sql/Clustering-Functions/ST_LocalOutlierFactor.md
+++ b/docs/api/sql/Clustering-Functions/ST_LocalOutlierFactor.md
@@ -29,6 +29,8 @@ the record is an outlier.
 !!!Note
     ST_LocalOutlierFactor has a useSphere parameter rather than a useSpheroid 
parameter. This function thus uses a spherical model of the earth rather than 
an ellipsoidal model when calculating distance.
 
+![ST_LocalOutlierFactor](../../../image/ST_LocalOutlierFactor/ST_LocalOutlierFactor.svg
 "ST_LocalOutlierFactor")
+
 Format: `ST_LocalOutlierFactor(geometry: Geometry, k: Int, useSphere: Boolean)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Linear-Referencing/ST_AddMeasure.md 
b/docs/api/sql/Linear-Referencing/ST_AddMeasure.md
index b67d7f4e2b..7e5a37ed60 100644
--- a/docs/api/sql/Linear-Referencing/ST_AddMeasure.md
+++ b/docs/api/sql/Linear-Referencing/ST_AddMeasure.md
@@ -21,6 +21,8 @@
 
 Introduction: Computes a new geometry with measure (M) values linearly 
interpolated between start and end points. For geometries lacking M dimensions, 
M values are added. Existing M values are overwritten by the new values. 
Applies only to LineString and MultiLineString inputs.
 
+![ST_AddMeasure](../../../image/ST_AddMeasure/ST_AddMeasure.svg 
"ST_AddMeasure")
+
 Format: `ST_AddMeasure(geom: Geometry, measureStart: Double, measureEnd: 
Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Linear-Referencing/ST_InterpolatePoint.md 
b/docs/api/sql/Linear-Referencing/ST_InterpolatePoint.md
index 7db21af1e9..f2c83ce576 100644
--- a/docs/api/sql/Linear-Referencing/ST_InterpolatePoint.md
+++ b/docs/api/sql/Linear-Referencing/ST_InterpolatePoint.md
@@ -24,6 +24,8 @@ Introduction: Returns the interpolated measure value of a 
linear measured LineSt
 !!!Note
     Make sure that both geometries have the same SRID, otherwise the function 
will throw an IllegalArgumentException.
 
+![ST_InterpolatePoint](../../../image/ST_InterpolatePoint/ST_InterpolatePoint.svg
 "ST_InterpolatePoint")
+
 Format: `ST_InterpolatePoint(linestringM: Geometry, point: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Linear-Referencing/ST_IsValidTrajectory.md 
b/docs/api/sql/Linear-Referencing/ST_IsValidTrajectory.md
index 2498ca0d28..3930692e88 100644
--- a/docs/api/sql/Linear-Referencing/ST_IsValidTrajectory.md
+++ b/docs/api/sql/Linear-Referencing/ST_IsValidTrajectory.md
@@ -21,6 +21,8 @@
 
 Introduction: This function checks if a geometry is a valid trajectory 
representation. For a trajectory to be considered valid, it must be a 
LineString that includes measure (M) values. The key requirement is that the M 
values increase from one vertex to the next as you move along the line.
 
+![ST_IsValidTrajectory](../../../image/ST_IsValidTrajectory/ST_IsValidTrajectory.svg
 "ST_IsValidTrajectory")
+
 Format: `ST_IsValidTrajectory(geom: Geometry)`
 
 Return type: `Boolean`
diff --git a/docs/api/sql/Linear-Referencing/ST_LineInterpolatePoint.md 
b/docs/api/sql/Linear-Referencing/ST_LineInterpolatePoint.md
index fa968eaf04..9c36ca301b 100644
--- a/docs/api/sql/Linear-Referencing/ST_LineInterpolatePoint.md
+++ b/docs/api/sql/Linear-Referencing/ST_LineInterpolatePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a point interpolated along a line. First argument must 
be a LINESTRING. Second argument is a Double between 0 and 1 representing 
fraction of total linestring length the point has to be located.
 
+![ST_LineInterpolatePoint](../../../image/ST_LineInterpolatePoint/ST_LineInterpolatePoint.svg
 "ST_LineInterpolatePoint")
+
 Format: `ST_LineInterpolatePoint (geom: Geometry, fraction: Double)`
 
 Return type: `Geometry`
diff --git a/docs/api/sql/Linear-Referencing/ST_LineLocatePoint.md 
b/docs/api/sql/Linear-Referencing/ST_LineLocatePoint.md
index 920371ec56..620ee69ca2 100644
--- a/docs/api/sql/Linear-Referencing/ST_LineLocatePoint.md
+++ b/docs/api/sql/Linear-Referencing/ST_LineLocatePoint.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns a double between 0 and 1, representing the location of 
the closest point on the LineString as a fraction of its total length. The 
first argument must be a LINESTRING, and the second argument is a POINT 
geometry.
 
+![ST_LineLocatePoint](../../../image/ST_LineLocatePoint/ST_LineLocatePoint.svg 
"ST_LineLocatePoint")
+
 Format: `ST_LineLocatePoint(linestring: Geometry, point: Geometry)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Linear-Referencing/ST_LineSubstring.md 
b/docs/api/sql/Linear-Referencing/ST_LineSubstring.md
index ae16b5da99..791354b0bc 100644
--- a/docs/api/sql/Linear-Referencing/ST_LineSubstring.md
+++ b/docs/api/sql/Linear-Referencing/ST_LineSubstring.md
@@ -21,6 +21,8 @@
 
 Introduction: Return a linestring being a substring of the input one starting 
and ending at the given fractions of total 2d length. Second and third 
arguments are Double values between 0 and 1. This only works with LINESTRINGs.
 
+![ST_LineSubstring](../../../image/ST_LineSubstring/ST_LineSubstring.svg 
"ST_LineSubstring")
+
 Format:
 
 `ST_LineSubstring (geom: Geometry, startfraction: Double, endfraction: Double)`
diff --git a/docs/api/sql/Linear-Referencing/ST_LocateAlong.md 
b/docs/api/sql/Linear-Referencing/ST_LocateAlong.md
index 32521f7508..00b17f6de0 100644
--- a/docs/api/sql/Linear-Referencing/ST_LocateAlong.md
+++ b/docs/api/sql/Linear-Referencing/ST_LocateAlong.md
@@ -25,6 +25,8 @@ Additionally, an optional `offset` parameter can shift the 
resulting points left
 
 This allows identifying precise locations along a measured linear geometry 
based on supplied measure values, with the ability to offset the output points 
if needed.
 
+![ST_LocateAlong](../../../image/ST_LocateAlong/ST_LocateAlong.svg 
"ST_LocateAlong")
+
 Format:
 
 `ST_LocateAlong(linear: Geometry, measure: Double, offset: Double)`
diff --git a/docs/image/ExpandAddress/ExpandAddress.svg 
b/docs/image/ExpandAddress/ExpandAddress.svg
new file mode 100644
index 0000000000..ab47bc5877
--- /dev/null
+++ b/docs/image/ExpandAddress/ExpandAddress.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="100" viewBox="0 0 
400 100">
+  <rect width="400" height="100" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ExpandAddress</text>
+
+  <defs><marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" 
fill="#666"/></marker></defs>
+  <text x="60" y="55" font-family="monospace" font-size="10" fill="#1565C0" 
text-anchor="middle">"123 Main St"</text>
+  <line x1="115" y1="52" x2="165" y2="52" stroke="#666" stroke-width="1.5" 
marker-end="url(#arrowhead)"/>
+
+  <text x="300" y="48" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">"123 Main Street"</text>
+  <text x="300" y="62" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">"123 Main Str"</text>
+  <text x="300" y="76" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">... (expanded forms)</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ParseAddress/ParseAddress.svg 
b/docs/image/ParseAddress/ParseAddress.svg
new file mode 100644
index 0000000000..269d756e9b
--- /dev/null
+++ b/docs/image/ParseAddress/ParseAddress.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="110" viewBox="0 0 
400 110">
+  <rect width="400" height="110" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ParseAddress</text>
+
+  <defs><marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" 
fill="#666"/></marker></defs>
+  <text x="80" y="52" font-family="monospace" font-size="9" fill="#1565C0" 
text-anchor="middle">"123 Main St,</text>
+  <text x="80" y="64" font-family="monospace" font-size="9" fill="#1565C0" 
text-anchor="middle">Seattle, WA"</text>
+  <line x1="140" y1="55" x2="190" y2="55" stroke="#666" stroke-width="1.5" 
marker-end="url(#arrowhead)"/>
+
+  <text x="310" y="42" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">house: "123"</text>
+  <text x="310" y="56" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">road: "Main St"</text>
+  <text x="310" y="70" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">city: "Seattle"</text>
+  <text x="310" y="84" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">state: "WA"</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_AddMeasure/ST_AddMeasure.svg 
b/docs/image/ST_AddMeasure/ST_AddMeasure.svg
new file mode 100644
index 0000000000..7170e20e8d
--- /dev/null
+++ b/docs/image/ST_AddMeasure/ST_AddMeasure.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="150" viewBox="0 0 
400 150">
+  <rect width="400" height="150" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_AddMeasure</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">measureStart=100, measureEnd=400</text>
+  <polyline points="102.5,110.0 200.0,45.0 297.5,77.5" fill="none" 
stroke="#43A047" stroke-width="2.5"/>
+  <circle cx="102.5" cy="110.0" r="4" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="102.5" y="100.0" font-family="monospace" font-size="9" 
fill="#43A047" text-anchor="middle">M=100</text>
+  <circle cx="200.0" cy="45.0" r="4" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="200.0" y="35.0" font-family="monospace" font-size="9" 
fill="#43A047" text-anchor="middle">M=250</text>
+  <circle cx="297.5" cy="77.5" r="4" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="297.5" y="67.5" font-family="monospace" font-size="9" 
fill="#43A047" text-anchor="middle">M=400</text>
+  <rect x="155" y="132" width="8" height="8" fill="rgba(67,160,71,0.2)" 
stroke="#43A047" stroke-width="1"/>
+  <text x="167" y="140" font-family="monospace" font-size="9" 
fill="#43A047">Result (with M values)</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_BoundingDiagonal/ST_BoundingDiagonal.svg 
b/docs/image/ST_BoundingDiagonal/ST_BoundingDiagonal.svg
new file mode 100644
index 0000000000..d6f79f80bd
--- /dev/null
+++ b/docs/image/ST_BoundingDiagonal/ST_BoundingDiagonal.svg
@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_BoundingDiagonal</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">LineString from min to max corner</text>
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <line x1="166.7" y1="111.7" x2="233.3" y2="53.3" stroke="#E53935" 
stroke-width="2.5"/>
+  <circle cx="166.7" cy="111.7" r="4" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <circle cx="233.3" cy="53.3" r="4" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="161.7" y="125.7" font-family="monospace" font-size="8" 
fill="#E53935" text-anchor="end">min</text>
+  <text x="238.3" y="47.3" font-family="monospace" font-size="8" 
fill="#E53935">max</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="#E53935" stroke="#E53935" 
stroke-width="1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Diagonal</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Collect_Agg/ST_Collect_Agg.svg 
b/docs/image/ST_Collect_Agg/ST_Collect_Agg.svg
new file mode 100644
index 0000000000..8d9bea9bf8
--- /dev/null
+++ b/docs/image/ST_Collect_Agg/ST_Collect_Agg.svg
@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="130" viewBox="0 0 
400 130">
+  <rect width="400" height="130" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_Collect_Agg</text>
+
+  <defs><marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" 
fill="#666"/></marker></defs>
+  <polygon points="48.8,95.0 76.2,95.0 76.2,67.5 48.8,67.5 48.8,95.0" 
stroke="#1565C0" stroke-width="1.5" fill="rgba(21,101,192,0.15)"/>
+  <polygon points="62.5,81.2 103.8,81.2 103.8,40.0 62.5,40.0 62.5,81.2" 
stroke="#7B1FA2" stroke-width="1.5" fill="rgba(123,31,162,0.15)"/>
+  <polygon points="90.0,95.0 131.2,95.0 131.2,53.8 90.0,53.8 90.0,95.0" 
stroke="#FF6F00" stroke-width="1.5" fill="rgba(255,111,0,0.15)"/>
+  <line x1="175" y1="68" x2="225" y2="68" stroke="#666" stroke-width="1.5" 
marker-end="url(#arrowhead)"/>
+  <text x="200" y="60" font-family="monospace" font-size="9" fill="#666" 
text-anchor="middle">Collect</text>
+  <polygon points="258.8,95.0 286.2,95.0 286.2,67.5 258.8,67.5 258.8,95.0" 
stroke="#43A047" stroke-width="1.5" fill="rgba(67,160,71,0.12)"/>
+  <polygon points="272.5,81.2 313.8,81.2 313.8,40.0 272.5,40.0 272.5,81.2" 
stroke="#43A047" stroke-width="1.5" fill="rgba(67,160,71,0.12)"/>
+  <polygon points="300.0,95.0 341.2,95.0 341.2,53.8 300.0,53.8 300.0,95.0" 
stroke="#43A047" stroke-width="1.5" fill="rgba(67,160,71,0.12)"/>
+  <text x="300" y="118" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">GeometryCollection</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_DBSCAN/ST_DBSCAN.svg 
b/docs/image/ST_DBSCAN/ST_DBSCAN.svg
new file mode 100644
index 0000000000..b39d3b4db2
--- /dev/null
+++ b/docs/image/ST_DBSCAN/ST_DBSCAN.svg
@@ -0,0 +1,29 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="170" viewBox="0 0 
400 170">
+  <rect width="400" height="170" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_DBSCAN</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">epsilon=0.8, minPoints=3</text>
+  <circle cx="163.4" cy="118.1" r="5" fill="#1565C0" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="170.3" cy="113.6" r="5" fill="#1565C0" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="158.9" cy="120.4" r="5" fill="#1565C0" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="165.7" cy="125.0" r="5" fill="#1565C0" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="172.6" cy="115.9" r="5" fill="#1565C0" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="232.0" cy="49.6" r="5" fill="#43A047" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="236.6" cy="54.1" r="5" fill="#43A047" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="229.7" cy="47.3" r="5" fill="#43A047" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="238.9" cy="45.0" r="5" fill="#43A047" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="227.4" cy="56.4" r="5" fill="#43A047" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="232.0" cy="118.1" r="5" fill="#FF6F00" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="238.9" cy="122.7" r="5" fill="#FF6F00" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="227.4" cy="113.6" r="5" fill="#FF6F00" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="234.3" cy="111.3" r="5" fill="#FF6F00" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="241.1" cy="118.1" r="5" fill="#FF6F00" fill-opacity="0.7" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="197.7" cy="61.0" r="5" fill="#E53935" fill-opacity="0.5" 
stroke="#E53935" stroke-width="1.5" stroke-dasharray="2,2"/>
+  <text x="205.7" y="65.0" font-family="monospace" font-size="8" 
fill="#E53935">noise</text>
+  <text x="166.2" y="104.6" font-family="monospace" font-size="8" 
fill="#1565C0" text-anchor="middle">Cluster 0</text>
+  <text x="232.9" y="36.5" font-family="monospace" font-size="8" 
fill="#43A047" text-anchor="middle">Cluster 1</text>
+  <text x="234.7" y="102.8" font-family="monospace" font-size="8" 
fill="#FF6F00" text-anchor="middle">Cluster 2</text>
+  <rect x="110" y="152" width="8" height="8" fill="#1565C0" stroke="#1565C0" 
stroke-width="1"/>
+  <text x="122" y="160" font-family="monospace" font-size="9" 
fill="#1565C0">Cluster</text>
+  <rect x="200" y="152" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="160" font-family="monospace" font-size="9" 
fill="#E53935">Noise</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Envelope/ST_Envelope.svg 
b/docs/image/ST_Envelope/ST_Envelope.svg
new file mode 100644
index 0000000000..a772c98649
--- /dev/null
+++ b/docs/image/ST_Envelope/ST_Envelope.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_Envelope</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">Bounding box of geometry</text>
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <polygon points="166.7,111.7 233.3,111.7 233.3,53.3 166.7,53.3 166.7,111.7" 
stroke="#E53935" stroke-width="2" fill="none" stroke-dasharray="5,3"/>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Envelope</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Envelope_Agg/ST_Envelope_Agg.svg 
b/docs/image/ST_Envelope_Agg/ST_Envelope_Agg.svg
new file mode 100644
index 0000000000..a903142bc8
--- /dev/null
+++ b/docs/image/ST_Envelope_Agg/ST_Envelope_Agg.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="130" viewBox="0 0 
400 130">
+  <rect width="400" height="130" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_Envelope_Agg</text>
+
+  <defs><marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" 
fill="#666"/></marker></defs>
+  <polygon points="48.8,95.0 76.2,95.0 76.2,67.5 48.8,67.5 48.8,95.0" 
stroke="#1565C0" stroke-width="1.5" fill="rgba(21,101,192,0.15)"/>
+  <polygon points="62.5,81.2 103.8,81.2 103.8,40.0 62.5,40.0 62.5,81.2" 
stroke="#7B1FA2" stroke-width="1.5" fill="rgba(123,31,162,0.15)"/>
+  <polygon points="90.0,95.0 131.2,95.0 131.2,53.8 90.0,53.8 90.0,95.0" 
stroke="#FF6F00" stroke-width="1.5" fill="rgba(255,111,0,0.15)"/>
+  <line x1="175" y1="68" x2="225" y2="68" stroke="#666" stroke-width="1.5" 
marker-end="url(#arrowhead)"/>
+  <text x="200" y="60" font-family="monospace" font-size="9" fill="#666" 
text-anchor="middle">Envelope</text>
+  <polygon points="258.8,95.0 341.2,95.0 341.2,40.0 258.8,40.0 258.8,95.0" 
stroke="#E53935" stroke-width="2" fill="rgba(229,57,53,0.10)" 
stroke-dasharray="5,3"/>
+  <text x="300" y="118" font-family="monospace" font-size="9" fill="#E53935" 
text-anchor="middle">Bounding Box</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Expand/ST_Expand.svg 
b/docs/image/ST_Expand/ST_Expand.svg
new file mode 100644
index 0000000000..dd06c6a74a
--- /dev/null
+++ b/docs/image/ST_Expand/ST_Expand.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_Expand</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">delta = 0.8</text>
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <polygon points="166.7,111.7 233.3,111.7 233.3,53.3 166.7,53.3 166.7,111.7" 
stroke="#999" stroke-width="1" fill="none" stroke-dasharray="3,2"/>
+  <polygon points="153.3,125.0 246.7,125.0 246.7,40.0 153.3,40.0 153.3,125.0" 
stroke="#43A047" stroke-width="2" fill="rgba(67,160,71,0.10)"/>
+  <rect x="65" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="77" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="155" y="142" width="8" height="8" fill="none" stroke="#999" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="167" y="150" font-family="monospace" font-size="9" 
fill="#999">Envelope</text>
+  <rect x="245" y="142" width="8" height="8" fill="rgba(67,160,71,0.10)" 
stroke="#43A047" stroke-width="1"/>
+  <text x="257" y="150" font-family="monospace" font-size="9" 
fill="#43A047">Expanded</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_InterpolatePoint/ST_InterpolatePoint.svg 
b/docs/image/ST_InterpolatePoint/ST_InterpolatePoint.svg
new file mode 100644
index 0000000000..e3643516ad
--- /dev/null
+++ b/docs/image/ST_InterpolatePoint/ST_InterpolatePoint.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="150" viewBox="0 0 
400 150">
+  <rect width="400" height="150" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_InterpolatePoint</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">Returns M value at closest point</text>
+  <polyline points="102.5,110.0 200.0,45.0 297.5,77.5" fill="none" 
stroke="#1565C0" stroke-width="2"/>
+  <circle cx="102.5" cy="110.0" r="2.5" fill="#1565C0"/>
+  <circle cx="200.0" cy="45.0" r="2.5" fill="#1565C0"/>
+  <circle cx="297.5" cy="77.5" r="2.5" fill="#1565C0"/>
+  <circle cx="167.5" cy="110.0" r="5" fill="#FF9800" stroke="#fff" 
stroke-width="1"/>
+  <text x="167.5" y="102.0" font-family="monospace" font-size="9" 
fill="#FF9800" text-anchor="middle">Query</text>
+  <circle cx="151.2" cy="77.5" r="4" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="151.2" y="69.5" font-family="monospace" font-size="9" 
fill="#E53935" text-anchor="middle">M=175</text>
+  <line x1="167.5" y1="110.0" x2="151.2" y2="77.5" stroke="#999" 
stroke-width="1" stroke-dasharray="3,2"/>
+  <rect x="65" y="132" width="8" height="8" fill="rgba(21,101,192,0.2)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="77" y="140" font-family="monospace" font-size="9" 
fill="#1565C0">LineStringM</text>
+  <rect x="155" y="132" width="8" height="8" fill="#FF9800" stroke="#FF9800" 
stroke-width="1"/>
+  <text x="167" y="140" font-family="monospace" font-size="9" 
fill="#FF9800">Query</text>
+  <rect x="245" y="132" width="8" height="8" fill="#E53935" stroke="#E53935" 
stroke-width="1"/>
+  <text x="257" y="140" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Intersection_Agg/ST_Intersection_Agg.svg 
b/docs/image/ST_Intersection_Agg/ST_Intersection_Agg.svg
new file mode 100644
index 0000000000..f662f608fd
--- /dev/null
+++ b/docs/image/ST_Intersection_Agg/ST_Intersection_Agg.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="130" viewBox="0 0 
400 130">
+  <rect width="400" height="130" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_Intersection_Agg</text>
+
+  <defs><marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" 
fill="#666"/></marker></defs>
+  <polygon points="48.8,95.0 76.2,95.0 76.2,67.5 48.8,67.5 48.8,95.0" 
stroke="#1565C0" stroke-width="1.5" fill="rgba(21,101,192,0.15)"/>
+  <polygon points="62.5,81.2 103.8,81.2 103.8,40.0 62.5,40.0 62.5,81.2" 
stroke="#7B1FA2" stroke-width="1.5" fill="rgba(123,31,162,0.15)"/>
+  <polygon points="90.0,95.0 131.2,95.0 131.2,53.8 90.0,53.8 90.0,95.0" 
stroke="#FF6F00" stroke-width="1.5" fill="rgba(255,111,0,0.15)"/>
+  <line x1="175" y1="68" x2="225" y2="68" stroke="#666" stroke-width="1.5" 
marker-end="url(#arrowhead)"/>
+  <text x="200" y="60" font-family="monospace" font-size="9" fill="#666" 
text-anchor="middle">Intersect</text>
+  <polygon points="300.0,81.2 313.8,81.2 313.8,67.5 300.0,67.5 300.0,81.2" 
stroke="#E53935" stroke-width="2" fill="rgba(229,57,53,0.20)"/>
+  <text x="300" y="118" font-family="monospace" font-size="9" fill="#E53935" 
text-anchor="middle">Intersection</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_IsValidTrajectory/ST_IsValidTrajectory.svg 
b/docs/image/ST_IsValidTrajectory/ST_IsValidTrajectory.svg
new file mode 100644
index 0000000000..44e392b5fc
--- /dev/null
+++ b/docs/image/ST_IsValidTrajectory/ST_IsValidTrajectory.svg
@@ -0,0 +1,25 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="130" viewBox="0 0 
400 130">
+  <rect width="400" height="130" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_IsValidTrajectory</text>
+
+  <polyline points="60.0,90.0 90.0,60.0 120.0,75.0 150.0,45.0" fill="none" 
stroke="#43A047" stroke-width="2"/>
+  <circle cx="60.0" cy="90.0" r="3" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="60.0" y="82.0" font-family="monospace" font-size="8" fill="#43A047" 
text-anchor="middle">M=10</text>
+  <circle cx="90.0" cy="60.0" r="3" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="90.0" y="52.0" font-family="monospace" font-size="8" fill="#43A047" 
text-anchor="middle">M=20</text>
+  <circle cx="120.0" cy="75.0" r="3" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="120.0" y="67.0" font-family="monospace" font-size="8" 
fill="#43A047" text-anchor="middle">M=30</text>
+  <circle cx="150.0" cy="45.0" r="3" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="150.0" y="37.0" font-family="monospace" font-size="8" 
fill="#43A047" text-anchor="middle">M=40</text>
+  <text x="105" y="115" font-family="monospace" font-size="10" fill="#43A047" 
text-anchor="middle">Valid (true)</text>
+  <polyline points="250.0,90.0 280.0,60.0 310.0,75.0 340.0,45.0" fill="none" 
stroke="#E53935" stroke-width="2"/>
+  <circle cx="250.0" cy="90.0" r="3" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="250.0" y="82.0" font-family="monospace" font-size="8" 
fill="#E53935" text-anchor="middle">M=10</text>
+  <circle cx="280.0" cy="60.0" r="3" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="280.0" y="52.0" font-family="monospace" font-size="8" 
fill="#E53935" text-anchor="middle">M=30</text>
+  <circle cx="310.0" cy="75.0" r="3" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="310.0" y="67.0" font-family="monospace" font-size="8" 
fill="#E53935" text-anchor="middle">M=20</text>
+  <circle cx="340.0" cy="45.0" r="3" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="340.0" y="37.0" font-family="monospace" font-size="8" 
fill="#E53935" text-anchor="middle">M=40</text>
+  <text x="295" y="115" font-family="monospace" font-size="10" fill="#E53935" 
text-anchor="middle">Invalid (false)</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LineInterpolatePoint/ST_LineInterpolatePoint.svg 
b/docs/image/ST_LineInterpolatePoint/ST_LineInterpolatePoint.svg
new file mode 100644
index 0000000000..6be58ca05c
--- /dev/null
+++ b/docs/image/ST_LineInterpolatePoint/ST_LineInterpolatePoint.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="150" viewBox="0 0 
400 150">
+  <rect width="400" height="150" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_LineInterpolatePoint</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">fraction = 0.4</text>
+  <polyline points="138.8,115.0 173.8,62.5 226.2,80.0 261.2,45.0" fill="none" 
stroke="#1565C0" stroke-width="2"/>
+  <circle cx="138.8" cy="115.0" r="2.5" fill="#1565C0"/>
+  <circle cx="173.8" cy="62.5" r="2.5" fill="#1565C0"/>
+  <circle cx="226.2" cy="80.0" r="2.5" fill="#1565C0"/>
+  <circle cx="261.2" cy="45.0" r="2.5" fill="#1565C0"/>
+  <circle cx="177.6" cy="63.8" r="5" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="177.6" y="55.8" font-family="monospace" font-size="9" 
fill="#E53935" text-anchor="middle">40%</text>
+  <rect x="110" y="132" width="8" height="8" fill="rgba(21,101,192,0.2)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="140" font-family="monospace" font-size="9" 
fill="#1565C0">LineString</text>
+  <rect x="200" y="132" width="8" height="8" fill="#E53935" stroke="#E53935" 
stroke-width="1"/>
+  <text x="212" y="140" font-family="monospace" font-size="9" 
fill="#E53935">Result Point</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LineLocatePoint/ST_LineLocatePoint.svg 
b/docs/image/ST_LineLocatePoint/ST_LineLocatePoint.svg
new file mode 100644
index 0000000000..cab6dbe255
--- /dev/null
+++ b/docs/image/ST_LineLocatePoint/ST_LineLocatePoint.svg
@@ -0,0 +1,21 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="150" viewBox="0 0 
400 150">
+  <rect width="400" height="150" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_LineLocatePoint</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">Returns fraction = 0.35</text>
+  <polyline points="138.8,115.0 173.8,62.5 226.2,80.0 261.2,45.0" fill="none" 
stroke="#1565C0" stroke-width="2"/>
+  <circle cx="138.8" cy="115.0" r="2.5" fill="#1565C0"/>
+  <circle cx="173.8" cy="62.5" r="2.5" fill="#1565C0"/>
+  <circle cx="226.2" cy="80.0" r="2.5" fill="#1565C0"/>
+  <circle cx="261.2" cy="45.0" r="2.5" fill="#1565C0"/>
+  <circle cx="191.2" cy="106.2" r="5" fill="#FF9800" stroke="#fff" 
stroke-width="1"/>
+  <text x="191.2" y="98.2" font-family="monospace" font-size="9" 
fill="#FF9800" text-anchor="middle">Point</text>
+  <circle cx="171.4" cy="66.1" r="4" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="171.4" y="58.1" font-family="monospace" font-size="9" 
fill="#E53935" text-anchor="middle">Closest</text>
+  <line x1="191.2" y1="106.2" x2="171.4" y2="66.1" stroke="#999" 
stroke-width="1" stroke-dasharray="3,2"/>
+  <rect x="65" y="132" width="8" height="8" fill="rgba(21,101,192,0.2)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="77" y="140" font-family="monospace" font-size="9" 
fill="#1565C0">LineString</text>
+  <rect x="155" y="132" width="8" height="8" fill="#FF9800" stroke="#FF9800" 
stroke-width="1"/>
+  <text x="167" y="140" font-family="monospace" font-size="9" 
fill="#FF9800">Query</text>
+  <rect x="245" y="132" width="8" height="8" fill="#E53935" stroke="#E53935" 
stroke-width="1"/>
+  <text x="257" y="140" font-family="monospace" font-size="9" 
fill="#E53935">Closest</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LineSubstring/ST_LineSubstring.svg 
b/docs/image/ST_LineSubstring/ST_LineSubstring.svg
new file mode 100644
index 0000000000..b415fbf107
--- /dev/null
+++ b/docs/image/ST_LineSubstring/ST_LineSubstring.svg
@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="150" viewBox="0 0 
400 150">
+  <rect width="400" height="150" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_LineSubstring</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">startFraction=0.2, endFraction=0.7</text>
+  <polyline points="138.8,115.0 173.8,62.5 226.2,80.0 261.2,45.0" fill="none" 
stroke="#999" stroke-width="1.5" stroke-dasharray="4,3"/>
+  <polyline points="157.4,87.1 159.2,84.3 161.1,81.5 163.0,78.7 164.8,75.9 
166.7,73.1 168.6,70.3 170.4,67.5 172.3,64.7 174.4,62.7 177.6,63.8 180.8,64.9 
184.0,65.9 187.2,67.0 190.4,68.0 193.5,69.1 196.7,70.2 199.9,71.2 203.1,72.3 
206.3,73.3 209.5,74.4 212.7,75.5 215.9,76.5 219.0,77.6 222.2,78.7 225.4,79.7" 
fill="none" stroke="#43A047" stroke-width="3"/>
+  <circle cx="157.4" cy="87.1" r="4" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="157.4" y="79.1" font-family="monospace" font-size="9" 
fill="#43A047" text-anchor="middle">20%</text>
+  <circle cx="225.4" cy="79.7" r="4" fill="#43A047" stroke="#fff" 
stroke-width="1"/>
+  <text x="225.4" y="71.7" font-family="monospace" font-size="9" 
fill="#43A047" text-anchor="middle">70%</text>
+  <rect x="110" y="132" width="8" height="8" fill="rgba(153,153,153,0.2)" 
stroke="#999" stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="122" y="140" font-family="monospace" font-size="9" 
fill="#999">Original</text>
+  <rect x="200" y="132" width="8" height="8" fill="rgba(67,160,71,0.2)" 
stroke="#43A047" stroke-width="1"/>
+  <text x="212" y="140" font-family="monospace" font-size="9" 
fill="#43A047">Substring</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LocalOutlierFactor/ST_LocalOutlierFactor.svg 
b/docs/image/ST_LocalOutlierFactor/ST_LocalOutlierFactor.svg
new file mode 100644
index 0000000000..e84e6d9846
--- /dev/null
+++ b/docs/image/ST_LocalOutlierFactor/ST_LocalOutlierFactor.svg
@@ -0,0 +1,28 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="170" viewBox="0 0 
400 170">
+  <rect width="400" height="170" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_LocalOutlierFactor</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">k=5</text>
+  <circle cx="163.4" cy="118.1" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="170.3" cy="113.6" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="158.9" cy="120.4" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="165.7" cy="125.0" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="172.6" cy="115.9" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="232.0" cy="49.6" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="236.6" cy="54.1" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="229.7" cy="47.3" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="238.9" cy="45.0" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="227.4" cy="56.4" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="232.0" cy="118.1" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="238.9" cy="122.7" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="227.4" cy="113.6" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="234.3" cy="111.3" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="241.1" cy="118.1" r="4" fill="#1565C0" fill-opacity="0.6" 
stroke="#fff" stroke-width="1"/>
+  <circle cx="197.7" cy="61.0" r="10" fill="none" stroke="#E53935" 
stroke-width="2"/>
+  <circle cx="197.7" cy="61.0" r="4" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="211.7" y="65.0" font-family="monospace" font-size="9" 
fill="#E53935">LOF=2.8</text>
+  <text x="173.4" y="122.1" font-family="monospace" font-size="8" 
fill="#1565C0">LOF~1.0</text>
+  <rect x="110" y="152" width="8" height="8" fill="#1565C0" stroke="#1565C0" 
stroke-width="1"/>
+  <text x="122" y="160" font-family="monospace" font-size="9" 
fill="#1565C0">Inlier (LOF~1)</text>
+  <rect x="200" y="152" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1"/>
+  <text x="212" y="160" font-family="monospace" font-size="9" 
fill="#E53935">Outlier (LOF>1)</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_LocateAlong/ST_LocateAlong.svg 
b/docs/image/ST_LocateAlong/ST_LocateAlong.svg
new file mode 100644
index 0000000000..6b4619d477
--- /dev/null
+++ b/docs/image/ST_LocateAlong/ST_LocateAlong.svg
@@ -0,0 +1,18 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="150" viewBox="0 0 
400 150">
+  <rect width="400" height="150" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_LocateAlong</text>
+  <text x="200" y="32" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">measure = 200</text>
+  <polyline points="102.5,110.0 200.0,45.0 297.5,77.5" fill="none" 
stroke="#1565C0" stroke-width="2"/>
+  <circle cx="102.5" cy="110.0" r="2.5" fill="#1565C0"/>
+  <text x="102.5" y="102.0" font-family="monospace" font-size="8" 
fill="#1565C0" text-anchor="middle">M=100</text>
+  <circle cx="200.0" cy="45.0" r="2.5" fill="#1565C0"/>
+  <text x="200.0" y="37.0" font-family="monospace" font-size="8" 
fill="#1565C0" text-anchor="middle">M=300</text>
+  <circle cx="297.5" cy="77.5" r="2.5" fill="#1565C0"/>
+  <text x="297.5" y="69.5" font-family="monospace" font-size="8" 
fill="#1565C0" text-anchor="middle">M=500</text>
+  <circle cx="151.2" cy="77.5" r="5" fill="#E53935" stroke="#fff" 
stroke-width="1"/>
+  <text x="151.2" y="69.5" font-family="monospace" font-size="9" 
fill="#E53935" text-anchor="middle">M=200</text>
+  <rect x="110" y="132" width="8" height="8" fill="rgba(21,101,192,0.2)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="140" font-family="monospace" font-size="9" 
fill="#1565C0">LineStringM</text>
+  <rect x="200" y="132" width="8" height="8" fill="#E53935" stroke="#E53935" 
stroke-width="1"/>
+  <text x="212" y="140" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_MMax/ST_MMax.svg b/docs/image/ST_MMax/ST_MMax.svg
new file mode 100644
index 0000000000..26e6f54976
--- /dev/null
+++ b/docs/image/ST_MMax/ST_MMax.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_MMax</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <text x="200" y="80" font-family="monospace" font-size="11" fill="#E53935" 
text-anchor="middle">Returns max M coordinate</text>
+  <text x="200" y="95" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">(or NULL if no M dimension)</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_MMin/ST_MMin.svg b/docs/image/ST_MMin/ST_MMin.svg
new file mode 100644
index 0000000000..5518f598d8
--- /dev/null
+++ b/docs/image/ST_MMin/ST_MMin.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_MMin</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <text x="200" y="80" font-family="monospace" font-size="11" fill="#E53935" 
text-anchor="middle">Returns min M coordinate</text>
+  <text x="200" y="95" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">(or NULL if no M dimension)</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_Union_Agg/ST_Union_Agg.svg 
b/docs/image/ST_Union_Agg/ST_Union_Agg.svg
new file mode 100644
index 0000000000..7cc7793c0c
--- /dev/null
+++ b/docs/image/ST_Union_Agg/ST_Union_Agg.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="130" viewBox="0 0 
400 130">
+  <rect width="400" height="130" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_Union_Agg</text>
+
+  <defs><marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" 
refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" 
fill="#666"/></marker></defs>
+  <polygon points="48.8,95.0 76.2,95.0 76.2,67.5 48.8,67.5 48.8,95.0" 
stroke="#1565C0" stroke-width="1.5" fill="rgba(21,101,192,0.15)"/>
+  <polygon points="62.5,81.2 103.8,81.2 103.8,40.0 62.5,40.0 62.5,81.2" 
stroke="#7B1FA2" stroke-width="1.5" fill="rgba(123,31,162,0.15)"/>
+  <polygon points="90.0,95.0 131.2,95.0 131.2,53.8 90.0,53.8 90.0,95.0" 
stroke="#FF6F00" stroke-width="1.5" fill="rgba(255,111,0,0.15)"/>
+  <line x1="175" y1="68" x2="225" y2="68" stroke="#666" stroke-width="1.5" 
marker-end="url(#arrowhead)"/>
+  <text x="200" y="60" font-family="monospace" font-size="9" fill="#666" 
text-anchor="middle">Union</text>
+  <polygon points="258.8,95.0 300.0,95.0 341.2,95.0 341.2,53.8 313.8,40.0 
272.5,40.0 258.8,67.5 258.8,95.0" stroke="#43A047" stroke-width="2" 
fill="rgba(67,160,71,0.18)"/>
+  <text x="300" y="118" font-family="monospace" font-size="9" fill="#43A047" 
text-anchor="middle">Union</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_XMax/ST_XMax.svg b/docs/image/ST_XMax/ST_XMax.svg
new file mode 100644
index 0000000000..c3d2bf43bc
--- /dev/null
+++ b/docs/image/ST_XMax/ST_XMax.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_XMax</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <line x1="233.3" y1="48.3" x2="233.3" y2="116.7" stroke="#E53935" 
stroke-width="2" stroke-dasharray="5,3"/>
+  <text x="233.3" y="44.3" font-family="monospace" font-size="9" 
fill="#E53935" text-anchor="middle">max X = 5</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_XMin/ST_XMin.svg b/docs/image/ST_XMin/ST_XMin.svg
new file mode 100644
index 0000000000..4c607b5d6a
--- /dev/null
+++ b/docs/image/ST_XMin/ST_XMin.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_XMin</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <line x1="166.7" y1="48.3" x2="166.7" y2="116.7" stroke="#E53935" 
stroke-width="2" stroke-dasharray="5,3"/>
+  <text x="166.7" y="44.3" font-family="monospace" font-size="9" 
fill="#E53935" text-anchor="middle">min X = 1</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_YMax/ST_YMax.svg b/docs/image/ST_YMax/ST_YMax.svg
new file mode 100644
index 0000000000..1285f7c24c
--- /dev/null
+++ b/docs/image/ST_YMax/ST_YMax.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_YMax</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <line x1="161.7" y1="53.3" x2="238.3" y2="53.3" stroke="#E53935" 
stroke-width="2" stroke-dasharray="5,3"/>
+  <text x="243.3" y="57.3" font-family="monospace" font-size="9" 
fill="#E53935">max Y = 4</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_YMin/ST_YMin.svg b/docs/image/ST_YMin/ST_YMin.svg
new file mode 100644
index 0000000000..37e0870e02
--- /dev/null
+++ b/docs/image/ST_YMin/ST_YMin.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_YMin</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <line x1="161.7" y1="111.7" x2="238.3" y2="111.7" stroke="#E53935" 
stroke-width="2" stroke-dasharray="5,3"/>
+  <text x="243.3" y="115.7" font-family="monospace" font-size="9" 
fill="#E53935">min Y = 0.5</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ZMax/ST_ZMax.svg b/docs/image/ST_ZMax/ST_ZMax.svg
new file mode 100644
index 0000000000..e3434c9b1a
--- /dev/null
+++ b/docs/image/ST_ZMax/ST_ZMax.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_ZMax</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <text x="200" y="80" font-family="monospace" font-size="11" fill="#E53935" 
text-anchor="middle">Returns max Z coordinate</text>
+  <text x="200" y="95" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">(or NULL if no Z dimension)</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file
diff --git a/docs/image/ST_ZMin/ST_ZMin.svg b/docs/image/ST_ZMin/ST_ZMin.svg
new file mode 100644
index 0000000000..6270ddf9c5
--- /dev/null
+++ b/docs/image/ST_ZMin/ST_ZMin.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="400" height="160" viewBox="0 0 
400 160">
+  <rect width="400" height="160" fill="#f5f5f5" rx="5"/>
+  <text x="200" y="18" font-family="monospace" font-size="12" fill="#333" 
text-anchor="middle" font-weight="bold">ST_ZMin</text>
+
+  <polygon points="166.7,103.3 200.0,111.7 233.3,86.7 216.7,53.3 183.3,61.7 
166.7,103.3" stroke="#1565C0" stroke-width="2" fill="rgba(21,101,192,0.12)"/>
+  <text x="200" y="80" font-family="monospace" font-size="11" fill="#E53935" 
text-anchor="middle">Returns min Z coordinate</text>
+  <text x="200" y="95" font-family="monospace" font-size="9" fill="#888" 
text-anchor="middle">(or NULL if no Z dimension)</text>
+  <rect x="110" y="142" width="8" height="8" fill="rgba(21,101,192,0.12)" 
stroke="#1565C0" stroke-width="1"/>
+  <text x="122" y="150" font-family="monospace" font-size="9" 
fill="#1565C0">Geometry</text>
+  <rect x="200" y="142" width="8" height="8" fill="none" stroke="#E53935" 
stroke-width="1" stroke-dasharray="2,1"/>
+  <text x="212" y="150" font-family="monospace" font-size="9" 
fill="#E53935">Result</text>
+</svg>
\ No newline at end of file


Reply via email to