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

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

commit 9205e53e57e92154993fe42996afe0678c24188a
Author: Jia Yu <[email protected]>
AuthorDate: Fri Mar 6 16:23:02 2026 -0800

    [DOCS] Add SVG visuals for raster affine transformation functions (Phase 13)
---
 docs/api/sql/Raster-Accessors/RS_GeoReference.md     |  2 ++
 .../sql/Raster-Accessors/RS_RasterToWorldCoordX.md   |  2 ++
 .../sql/Raster-Accessors/RS_RasterToWorldCoordY.md   |  2 ++
 docs/api/sql/Raster-Accessors/RS_Rotation.md         |  2 ++
 docs/api/sql/Raster-Accessors/RS_ScaleX.md           |  2 ++
 docs/api/sql/Raster-Accessors/RS_ScaleY.md           |  2 ++
 docs/api/sql/Raster-Accessors/RS_SkewX.md            |  2 ++
 docs/api/sql/Raster-Accessors/RS_SkewY.md            |  2 ++
 docs/api/sql/Raster-Accessors/RS_UpperLeftX.md       |  2 ++
 docs/api/sql/Raster-Accessors/RS_UpperLeftY.md       |  2 ++
 .../sql/Raster-Accessors/RS_WorldToRasterCoordX.md   |  2 ++
 .../sql/Raster-Accessors/RS_WorldToRasterCoordY.md   |  2 ++
 docs/api/sql/Raster-Operators/RS_SetGeoReference.md  |  2 ++
 docs/api/sql/Raster-affine-transformation.md         |  2 ++
 docs/image/RS_GeoReference/RS_GeoReference.svg       | 12 ++++++++++++
 .../RS_RasterToWorldCoordX.svg                       | 11 +++++++++++
 .../RS_RasterToWorldCoordY.svg                       | 11 +++++++++++
 docs/image/RS_Rotation/RS_Rotation.svg               | 11 +++++++++++
 docs/image/RS_ScaleX/RS_ScaleX.svg                   | 14 ++++++++++++++
 docs/image/RS_ScaleY/RS_ScaleY.svg                   | 14 ++++++++++++++
 docs/image/RS_SetGeoReference/RS_SetGeoReference.svg | 13 +++++++++++++
 docs/image/RS_SkewX/RS_SkewX.svg                     | 17 +++++++++++++++++
 docs/image/RS_SkewY/RS_SkewY.svg                     | 17 +++++++++++++++++
 docs/image/RS_UpperLeftX/RS_UpperLeftX.svg           | 12 ++++++++++++
 docs/image/RS_UpperLeftY/RS_UpperLeftY.svg           | 12 ++++++++++++
 .../RS_WorldToRasterCoordX.svg                       | 12 ++++++++++++
 .../RS_WorldToRasterCoordY.svg                       | 13 +++++++++++++
 .../Raster_Affine_Transformation.svg                 | 20 ++++++++++++++++++++
 28 files changed, 217 insertions(+)

diff --git a/docs/api/sql/Raster-Accessors/RS_GeoReference.md 
b/docs/api/sql/Raster-Accessors/RS_GeoReference.md
index bc289b689b..1fdea026c8 100644
--- a/docs/api/sql/Raster-Accessors/RS_GeoReference.md
+++ b/docs/api/sql/Raster-Accessors/RS_GeoReference.md
@@ -46,6 +46,8 @@ For more information about ScaleX, ScaleY, SkewX, SkewY, 
please refer to the [Af
 
     The `sample()` function is only there to reduce the data sent to 
`collect()`, you may also use `filter()` if that's appropriate.
 
+![RS_GeoReference](../../../image/RS_GeoReference/RS_GeoReference.svg 
"RS_GeoReference")
+
 Format: `RS_GeoReference(raster: Raster, format: String = "GDAL")`
 
 Return type: `String`
diff --git a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md 
b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md
index a6efc4cd6d..4c718e6ba0 100644
--- a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md
+++ b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the upper left X coordinate of the given row and column 
of the given raster geometric units of the geo-referenced raster. If any out of 
bounds values are given, the X coordinate of the assumed point considering 
existing raster pixel size and skew values will be returned.
 
+![RS_RasterToWorldCoordX](../../../image/RS_RasterToWorldCoordX/RS_RasterToWorldCoordX.svg
 "RS_RasterToWorldCoordX")
+
 Format: `RS_RasterToWorldCoordX(raster: Raster, colX: Integer, rowY: Integer)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md 
b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md
index 3ffc4fb874..47483fcfc3 100644
--- a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md
+++ b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the upper left Y coordinate of the given row and column 
of the given raster geometric units of the geo-referenced raster. If any out of 
bounds values are given, the Y coordinate of the assumed point considering 
existing raster pixel size and skew values will be returned.
 
+![RS_RasterToWorldCoordY](../../../image/RS_RasterToWorldCoordY/RS_RasterToWorldCoordY.svg
 "RS_RasterToWorldCoordY")
+
 Format: `RS_RasterToWorldCoordY(raster: Raster, colX: Integer, rowY: Integer)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_Rotation.md 
b/docs/api/sql/Raster-Accessors/RS_Rotation.md
index f6d46d2484..fee0ba5442 100644
--- a/docs/api/sql/Raster-Accessors/RS_Rotation.md
+++ b/docs/api/sql/Raster-Accessors/RS_Rotation.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the uniform rotation of the raster in radian.
 
+![RS_Rotation](../../../image/RS_Rotation/RS_Rotation.svg "RS_Rotation")
+
 Format: `RS_Rotation(raster: Raster)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_ScaleX.md 
b/docs/api/sql/Raster-Accessors/RS_ScaleX.md
index 1526037903..5eedfb0105 100644
--- a/docs/api/sql/Raster-Accessors/RS_ScaleX.md
+++ b/docs/api/sql/Raster-Accessors/RS_ScaleX.md
@@ -29,6 +29,8 @@ Introduction: Returns the pixel width of the raster in CRS 
units.
 
 For more information about ScaleX, ScaleY, SkewX, SkewY, please refer to the 
[Affine Transformations](../Raster-affine-transformation.md) section.
 
+![RS_ScaleX](../../../image/RS_ScaleX/RS_ScaleX.svg "RS_ScaleX")
+
 Format: `RS_ScaleX(raster: Raster)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_ScaleY.md 
b/docs/api/sql/Raster-Accessors/RS_ScaleY.md
index c7db3b03b3..66df1f7117 100644
--- a/docs/api/sql/Raster-Accessors/RS_ScaleY.md
+++ b/docs/api/sql/Raster-Accessors/RS_ScaleY.md
@@ -29,6 +29,8 @@ Introduction: Returns the pixel height of the raster in CRS 
units.
 
 For more information about ScaleX, ScaleY, SkewX, SkewY, please refer to the 
[Affine Transformations](../Raster-affine-transformation.md) section.
 
+![RS_ScaleY](../../../image/RS_ScaleY/RS_ScaleY.svg "RS_ScaleY")
+
 Format: `RS_ScaleY(raster: Raster)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_SkewX.md 
b/docs/api/sql/Raster-Accessors/RS_SkewX.md
index 6449a453b3..fb5524fb50 100644
--- a/docs/api/sql/Raster-Accessors/RS_SkewX.md
+++ b/docs/api/sql/Raster-Accessors/RS_SkewX.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the X skew or rotation parameter.
 
+![RS_SkewX](../../../image/RS_SkewX/RS_SkewX.svg "RS_SkewX")
+
 Format: `RS_SkewX(raster: Raster)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_SkewY.md 
b/docs/api/sql/Raster-Accessors/RS_SkewY.md
index dc93548820..142718903f 100644
--- a/docs/api/sql/Raster-Accessors/RS_SkewY.md
+++ b/docs/api/sql/Raster-Accessors/RS_SkewY.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the Y skew or rotation parameter.
 
+![RS_SkewY](../../../image/RS_SkewY/RS_SkewY.svg "RS_SkewY")
+
 Format: `RS_SkewY(raster: Raster)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md 
b/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md
index 273782de4d..35796777da 100644
--- a/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md
+++ b/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the X coordinate of the upper-left corner of the raster.
 
+![RS_UpperLeftX](../../../image/RS_UpperLeftX/RS_UpperLeftX.svg 
"RS_UpperLeftX")
+
 Format: `RS_UpperLeftX(raster: Raster)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md 
b/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md
index 9f963ebe07..2c836f1f41 100644
--- a/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md
+++ b/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the Y coordinate of the upper-left corner of the raster.
 
+![RS_UpperLeftY](../../../image/RS_UpperLeftY/RS_UpperLeftY.svg 
"RS_UpperLeftY")
+
 Format: `RS_UpperLeftY(raster: Raster)`
 
 Return type: `Double`
diff --git a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md 
b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md
index 10840dc4aa..0186ce4dd4 100644
--- a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md
+++ b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the X coordinate of the grid coordinate of the given 
world coordinates as an integer.
 
+![RS_WorldToRasterCoordX](../../../image/RS_WorldToRasterCoordX/RS_WorldToRasterCoordX.svg
 "RS_WorldToRasterCoordX")
+
 Format:
 
 `RS_WorldToRasterCoord(raster: Raster, point: Geometry)`
diff --git a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md 
b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md
index 69fa2f22fe..2aa488d9c2 100644
--- a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md
+++ b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md
@@ -21,6 +21,8 @@
 
 Introduction: Returns the Y coordinate of the grid coordinate of the given 
world coordinates as an integer.
 
+![RS_WorldToRasterCoordY](../../../image/RS_WorldToRasterCoordY/RS_WorldToRasterCoordY.svg
 "RS_WorldToRasterCoordY")
+
 Format:
 
 `RS_WorldToRasterCoordY(raster: Raster, point: Geometry)`
diff --git a/docs/api/sql/Raster-Operators/RS_SetGeoReference.md 
b/docs/api/sql/Raster-Operators/RS_SetGeoReference.md
index ba01020958..ad61c91bd3 100644
--- a/docs/api/sql/Raster-Operators/RS_SetGeoReference.md
+++ b/docs/api/sql/Raster-Operators/RS_SetGeoReference.md
@@ -24,6 +24,8 @@ Default format is `GDAL`. If all 6 parameters are not 
provided then will return
 
 For more information about ScaleX, ScaleY, SkewX, SkewY, please refer to the 
[Affine Transformations](../Raster-affine-transformation.md) section.
 
+![RS_SetGeoReference](../../../image/RS_SetGeoReference/RS_SetGeoReference.svg 
"RS_SetGeoReference")
+
 Format:
 
 ```
diff --git a/docs/api/sql/Raster-affine-transformation.md 
b/docs/api/sql/Raster-affine-transformation.md
index bb6d79c244..a15b56fe8d 100644
--- a/docs/api/sql/Raster-affine-transformation.md
+++ b/docs/api/sql/Raster-affine-transformation.md
@@ -19,6 +19,8 @@
 
 This page explains the basic concepts of Affine Transformation in Sedona 
Raster.
 
+![Raster_Affine_Transformation](../../image/Raster_Affine_Transformation/Raster_Affine_Transformation.svg
 "Raster Affine Transformation")
+
 ## Affine Transformations
 
 Affine transformations are a fundamental concept in computer graphics, 
geometry, and image processing that involve manipulating an object in a way 
that preserves lines and parallelism (but not necessarily distances and 
angles). These transformations are linear transformations followed by a 
translation, which means they can translate, scale, rotate, and shear objects 
without altering the relative arrangement of points, lines, or planes.
diff --git a/docs/image/RS_GeoReference/RS_GeoReference.svg 
b/docs/image/RS_GeoReference/RS_GeoReference.svg
new file mode 100644
index 0000000000..d28500c204
--- /dev/null
+++ b/docs/image/RS_GeoReference/RS_GeoReference.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="780" height="420" viewBox="0 0 
780 420" font-family="Arial, Helvetica, sans-serif">
+<rect width="780" height="420" fill="white"/>
+<text x="390" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_GeoReference</text><text x="390" 
y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Returns georeference metadata as a string (GDAL or ESRI 
format)</text><polygon points="60.0,90.0 300.0,114.0 330.0,279.0 90.0,255.0" 
fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" opacity="1.0"/>
+<line x1="120.0" y1="96.0" x2="150.0" y2="261.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="180.0" y1="102.0" x2="210.0" y2="267.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="240.0" y1="108.0" x2="270.0" y2="273.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="70.0" y1="145.0" x2="310.0" y2="169.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="80.0" y1="200.0" x2="320.0" y2="224.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/><circle cx="60" cy="90" r="4" 
fill="#FF8F00"/><text x="55" y="80" text-anchor="end" font-size="10" 
fill="#FF8F00" font-weight="bold" font-style="normal">Origin</text><line 
x1="60" y1="75" x2="120" y2="75" stroke="#1565C0" stroke-width="1.5"/>
+<polygon points="120,75 115.8,77.7 115.8,72.3" fill="#1565C0"/>
+<polygon points="60,75 64.2,72.3 64.2,77.7" fill="#1565C0"/><text x="90.0" 
y="67" text-anchor="middle" font-size="10" fill="#1565C0" font-weight="bold" 
font-style="normal">ScaleX</text><line x1="45" y1="90" x2="45" y2="145" 
stroke="#1565C0" stroke-width="1.5"/>
+<polygon points="45,145 42.3,140.8 47.7,140.8" fill="#1565C0"/>
+<polygon points="45,90 47.7,94.2 42.3,94.2" fill="#1565C0"/><text x="40" 
y="117.5" text-anchor="end" font-size="10" fill="#1565C0" font-weight="bold" 
font-style="normal">ScaleY</text><text x="470" y="85" text-anchor="middle" 
font-size="13" fill="#333" font-weight="bold" font-style="normal">GDAL Format 
(default)</text><rect x="380" y="95" width="195" height="160" fill="#F5F5F5" 
stroke="#666" stroke-width="1" rx="4"/><text x="395" y="117" 
text-anchor="start" font-size="13" fill="#1565C0" f [...]
\ No newline at end of file
diff --git a/docs/image/RS_RasterToWorldCoordX/RS_RasterToWorldCoordX.svg 
b/docs/image/RS_RasterToWorldCoordX/RS_RasterToWorldCoordX.svg
new file mode 100644
index 0000000000..fc36d32f8d
--- /dev/null
+++ b/docs/image/RS_RasterToWorldCoordX/RS_RasterToWorldCoordX.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="620" height="360" viewBox="0 0 
620 360" font-family="Arial, Helvetica, sans-serif">
+<rect width="620" height="360" fill="white"/>
+<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_RasterToWorldCoordX</text><text 
x="310" y="48" text-anchor="middle" font-size="12" fill="#666" 
font-weight="normal" font-style="normal">Returns the world X coordinate for a 
given grid column and row</text><rect x="60" y="80" width="275" height="180" 
fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/>
+<line x1="115" y1="80" x2="115" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="170" y1="80" x2="170" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="225" y1="80" x2="225" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="280" y1="80" x2="280" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="125" x2="335" y2="125" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="170" x2="335" y2="170" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="215" x2="335" y2="215" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><text x="87.5" y="74" text-anchor="middle" font-size="11" 
fill="#333" font-weight="bold" font-style="normal">1</text><text x="142.5" 
y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" 
font-style="normal">2</text><text x="197.5" y="74" text-anchor="middle" 
font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text 
x="252.5" y="74" text-anchor="middle" fon [...]
+<polygon points="390,150 383.0,153.9 383.5,145.3" fill="#333"/><rect x="400" 
y="110" width="200" height="100" fill="#F5F5F5" stroke="#666" stroke-width="1" 
rx="6"/><text x="500" y="135" text-anchor="middle" font-size="12" fill="#333" 
font-weight="bold" font-style="normal">World Coordinate</text><text x="500" 
y="162" text-anchor="middle" font-size="16" fill="#D32F2F" font-weight="bold" 
font-style="normal">X = -113</text><text x="500" y="185" text-anchor="middle" 
font-size="10" fill="#666" [...]
\ No newline at end of file
diff --git a/docs/image/RS_RasterToWorldCoordY/RS_RasterToWorldCoordY.svg 
b/docs/image/RS_RasterToWorldCoordY/RS_RasterToWorldCoordY.svg
new file mode 100644
index 0000000000..cefa8fa58b
--- /dev/null
+++ b/docs/image/RS_RasterToWorldCoordY/RS_RasterToWorldCoordY.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="620" height="360" viewBox="0 0 
620 360" font-family="Arial, Helvetica, sans-serif">
+<rect width="620" height="360" fill="white"/>
+<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_RasterToWorldCoordY</text><text 
x="310" y="48" text-anchor="middle" font-size="12" fill="#666" 
font-weight="normal" font-style="normal">Returns the world Y coordinate for a 
given grid column and row</text><rect x="60" y="80" width="275" height="180" 
fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/>
+<line x1="115" y1="80" x2="115" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="170" y1="80" x2="170" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="225" y1="80" x2="225" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="280" y1="80" x2="280" y2="260" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="125" x2="335" y2="125" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="170" x2="335" y2="170" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="215" x2="335" y2="215" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><text x="87.5" y="74" text-anchor="middle" font-size="11" 
fill="#333" font-weight="bold" font-style="normal">1</text><text x="142.5" 
y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" 
font-style="normal">2</text><text x="197.5" y="74" text-anchor="middle" 
font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text 
x="252.5" y="74" text-anchor="middle" fon [...]
+<polygon points="390,150 388.0,157.8 382.1,151.5" fill="#333"/><rect x="400" 
y="110" width="200" height="100" fill="#F5F5F5" stroke="#666" stroke-width="1" 
rx="6"/><text x="500" y="135" text-anchor="middle" font-size="12" fill="#333" 
font-weight="bold" font-style="normal">World Coordinate</text><text x="500" 
y="162" text-anchor="middle" font-size="16" fill="#D32F2F" font-weight="bold" 
font-style="normal">Y = 34</text><text x="500" y="185" text-anchor="middle" 
font-size="10" fill="#666" f [...]
\ No newline at end of file
diff --git a/docs/image/RS_Rotation/RS_Rotation.svg 
b/docs/image/RS_Rotation/RS_Rotation.svg
new file mode 100644
index 0000000000..b337a085de
--- /dev/null
+++ b/docs/image/RS_Rotation/RS_Rotation.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="620" height="380" viewBox="0 0 
620 380" font-family="Arial, Helvetica, sans-serif">
+<rect width="620" height="380" fill="white"/>
+<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_Rotation</text><text x="310" y="48" 
text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Returns the uniform rotation of the raster in 
radians</text><line x1="200" y1="300" x2="550" y2="300" stroke="#333" 
stroke-width="1.5"/>
+<polygon points="550,300 543.2,304.3 543.2,295.7" fill="#333"/><line x1="200" 
y1="300" x2="200" y2="65" stroke="#333" stroke-width="1.5"/>
+<polygon points="200,65 204.3,71.8 195.7,71.8" fill="#333"/><text x="555" 
y="305" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">X</text><text x="188" y="60" text-anchor="middle" 
font-size="13" fill="#333" font-weight="bold" 
font-style="normal">Y</text><polygon points="230.0,240.0 429.4,147.0 
499.1,296.6 299.7,389.5" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" 
opacity="1.0"/>
+<line x1="279.8" y1="216.8" x2="349.6" y2="366.3" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="329.7" y1="193.5" x2="399.4" y2="343.1" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="379.5" y1="170.3" x2="449.3" y2="319.8" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="253.2" y1="289.8" x2="452.6" y2="196.9" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="276.5" y1="339.7" x2="475.9" y2="246.7" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/><circle cx="230" cy="240" r="5" 
fill="#FF8F00" stroke="white" stroke-width="1.5"/><path d="M 290.0 240.0 A 60 
60 0 0 1 284.4 265.4" fill="none" stroke="#D32F2F" stroke-width="2"/><line 
x1="286.378467222199" y1="263.357095704442" x2="284.378467222199" 
y2="265.357095704442" stroke="#D32F2F" stroke-width="0.5"/>
+<polygon points="284.378467222199,265.357095704442 285.7,259.5 290.2,264.0" 
fill="#D32F2F"/><line x1="230" y1="240" x2="310" y2="240" stroke="#666" 
stroke-width="1.2" stroke-dasharray="5,3"/><text x="306.1510885553548" 
y="256.882289887172" text-anchor="middle" font-size="16" fill="#D32F2F" 
font-weight="bold" font-style="italic">θ</text><rect x="380" y="100" 
width="200" height="65" fill="#F5F5F5" stroke="#666" stroke-width="1" 
rx="6"/><text x="480" y="122" text-anchor="middle" font-size=" [...]
\ No newline at end of file
diff --git a/docs/image/RS_ScaleX/RS_ScaleX.svg 
b/docs/image/RS_ScaleX/RS_ScaleX.svg
new file mode 100644
index 0000000000..3558b8c9ea
--- /dev/null
+++ b/docs/image/RS_ScaleX/RS_ScaleX.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="580" height="320" viewBox="0 0 
580 320" font-family="Arial, Helvetica, sans-serif">
+<rect width="580" height="320" fill="white"/>
+<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_ScaleX</text><text x="290" y="48" 
text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Returns the pixel width of the raster in CRS 
units</text><rect x="90" y="80" width="350" height="200" fill="#E3F2FD" 
stroke="#1565C0" stroke-width="1.5"/>
+<line x1="160" y1="80" x2="160" y2="280" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="230" y1="80" x2="230" y2="280" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="300" y1="80" x2="300" y2="280" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="370" y1="80" x2="370" y2="280" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="90" y1="130" x2="440" y2="130" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="90" y1="180" x2="440" y2="180" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="90" y1="230" x2="440" y2="230" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><line x1="90" y1="300" x2="160" y2="300" stroke="#D32F2F" 
stroke-width="2.2"/>
+<polygon points="160,300 154.1,303.8 154.1,296.2" fill="#D32F2F"/>
+<polygon points="90,300 95.9,296.2 95.9,303.8" fill="#D32F2F"/><text x="125.0" 
y="322" text-anchor="middle" font-size="12" fill="#D32F2F" font-weight="bold" 
font-style="normal">ScaleX = pixel width</text><text x="125.0" y="340" 
text-anchor="middle" font-size="10" fill="#666" font-weight="normal" 
font-style="normal">(in CRS units, e.g., degrees or meters)</text><line x1="90" 
y1="355" x2="440" y2="355" stroke="#1565C0" stroke-width="1.5"/>
+<polygon points="440,355 434.1,358.8 434.1,351.2" fill="#1565C0"/>
+<polygon points="90,355 95.9,351.2 95.9,358.8" fill="#1565C0"/><text x="265.0" 
y="373" text-anchor="middle" font-size="11" fill="#1565C0" font-weight="normal" 
font-style="normal">Width × ScaleX = 5 × ScaleX</text><line x1="90" y1="80" 
x2="90" y2="295" stroke="#D32F2F" stroke-width="1" 
stroke-dasharray="3,3"/><line x1="160" y1="80" x2="160" y2="295" 
stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><text x="125.0" 
y="109.0" text-anchor="middle" font-size="10" fill="#1565C0" font-w [...]
\ No newline at end of file
diff --git a/docs/image/RS_ScaleY/RS_ScaleY.svg 
b/docs/image/RS_ScaleY/RS_ScaleY.svg
new file mode 100644
index 0000000000..2c8d83731d
--- /dev/null
+++ b/docs/image/RS_ScaleY/RS_ScaleY.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="580" height="340" viewBox="0 0 
580 340" font-family="Arial, Helvetica, sans-serif">
+<rect width="580" height="340" fill="white"/>
+<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_ScaleY</text><text x="290" y="48" 
text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Returns the pixel height of the raster in CRS 
units</text><rect x="140" y="75" width="240" height="225" fill="#E3F2FD" 
stroke="#1565C0" stroke-width="1.5"/>
+<line x1="200" y1="75" x2="200" y2="300" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="260" y1="75" x2="260" y2="300" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="320" y1="75" x2="320" y2="300" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="140" y1="120" x2="380" y2="120" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="140" y1="165" x2="380" y2="165" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="140" y1="210" x2="380" y2="210" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="140" y1="255" x2="380" y2="255" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><line x1="400" y1="75" x2="400" y2="120" stroke="#D32F2F" 
stroke-width="2.2"/>
+<polygon points="400,120 396.2,114.1 403.8,114.1" fill="#D32F2F"/>
+<polygon points="400,75 403.8,80.9 396.2,80.9" fill="#D32F2F"/><text x="410" 
y="101.5" text-anchor="start" font-size="12" fill="#D32F2F" font-weight="bold" 
font-style="normal">ScaleY</text><line x1="380" y1="75" x2="395" y2="75" 
stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><line x1="380" 
y1="120" x2="395" y2="120" stroke="#D32F2F" stroke-width="1" 
stroke-dasharray="3,3"/><line x1="480" y1="75" x2="480" y2="300" 
stroke="#1565C0" stroke-width="1.5"/>
+<polygon points="480,300 476.2,294.1 483.8,294.1" fill="#1565C0"/>
+<polygon points="480,75 483.8,80.9 476.2,80.9" fill="#1565C0"/><text x="490" 
y="191.5" text-anchor="start" font-size="11" fill="#1565C0" 
font-weight="normal" font-style="normal">5 × ScaleY</text><text x="170.0" 
y="101.5" text-anchor="middle" font-size="10" fill="#1565C0" font-weight="bold" 
font-style="normal">row 1</text><text x="170.0" y="146.5" text-anchor="middle" 
font-size="10" fill="#1565C0" font-weight="bold" font-style="normal">row 
2</text><text x="170.0" y="191.5" text-anchor="mi [...]
\ No newline at end of file
diff --git a/docs/image/RS_SetGeoReference/RS_SetGeoReference.svg 
b/docs/image/RS_SetGeoReference/RS_SetGeoReference.svg
new file mode 100644
index 0000000000..9ff2506c8f
--- /dev/null
+++ b/docs/image/RS_SetGeoReference/RS_SetGeoReference.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="800" height="380" viewBox="0 0 
800 380" font-family="Arial, Helvetica, sans-serif">
+<rect width="800" height="380" fill="white"/>
+<text x="400" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_SetGeoReference</text><text x="400" 
y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Sets the georeference metadata of a raster</text><text 
x="125.0" y="80" text-anchor="middle" font-size="13" fill="#333" 
font-weight="bold" font-style="normal">Input Raster</text><rect x="50" y="90" 
width="150" height="150" fill="#E8EAF6" stroke="#5C [...]
+<line x1="100" y1="90" x2="100" y2="240" stroke="#5C6BC0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="150" y1="90" x2="150" y2="240" stroke="#5C6BC0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="50" y1="140" x2="200" y2="140" stroke="#5C6BC0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="50" y1="190" x2="200" y2="190" stroke="#5C6BC0" stroke-width="0.8" 
opacity="0.5"/><text x="50" y="260" text-anchor="start" font-size="10" 
fill="#666" font-weight="normal" font-style="normal">ScaleX=1, 
ScaleY=-1</text><text x="50" y="276" text-anchor="start" font-size="10" 
fill="#666" font-weight="normal" font-style="normal">SkewX=0, 
SkewY=0</text><text x="50" y="292" text-anchor="start" font-size="10" 
fill="#666" font-weight="normal" font-style="normal">Origin=(0, 0)</text><rec 
[...]
+<polygon points="275,165 268.2,169.3 268.2,160.7" fill="#333"/><line x1="515" 
y1="165" x2="570" y2="165.0" stroke="#333" stroke-width="1.5"/>
+<polygon points="570,165.0 563.2,169.3 563.2,160.7" fill="#333"/><text 
x="673.0" y="80" text-anchor="middle" font-size="13" fill="#333" 
font-weight="bold" font-style="normal">Result Raster</text><polygon 
points="580.0,90.0 730.0,120.0 766.0,270.0 616.0,240.0" fill="#E3F2FD" 
stroke="#1565C0" stroke-width="1.5" opacity="1.0"/>
+<line x1="630.0" y1="100.0" x2="666.0" y2="250.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="680.0" y1="110.0" x2="716.0" y2="260.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="592.0" y1="140.0" x2="742.0" y2="170.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="604.0" y1="190.0" x2="754.0" y2="220.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/><text x="580" y="280" text-anchor="start" 
font-size="10" fill="#1565C0" font-weight="bold" font-style="normal">ScaleX=3, 
ScaleY=2</text><text x="580" y="296" text-anchor="start" font-size="10" 
fill="#00796B" font-weight="bold" font-style="normal">SkewX=1.5, 
SkewY=1.5</text><text x="580" y="312" text-anchor="start" font-size="10" 
fill="#FF8F00" font-weight="bold" font-style="normal">Origin [...]
\ No newline at end of file
diff --git a/docs/image/RS_SkewX/RS_SkewX.svg b/docs/image/RS_SkewX/RS_SkewX.svg
new file mode 100644
index 0000000000..98707b0059
--- /dev/null
+++ b/docs/image/RS_SkewX/RS_SkewX.svg
@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="700" height="370" viewBox="0 0 
700 370" font-family="Arial, Helvetica, sans-serif">
+<rect width="700" height="370" fill="white"/>
+<text x="350" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_SkewX</text><text x="350" y="48" 
text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">X skew: horizontal shift per row</text><text x="160.0" 
y="80" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">SkewX = 0</text><rect x="60" y="90" width="200" 
height="200" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/>
+<line x1="110" y1="90" x2="110" y2="290" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="160" y1="90" x2="160" y2="290" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="210" y1="90" x2="210" y2="290" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="140" x2="260" y2="140" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="190" x2="260" y2="190" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="240" x2="260" y2="240" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><text x="355" y="190.0" text-anchor="middle" font-size="28" 
fill="#333" font-weight="bold" font-style="normal">→</text><text x="530.0" 
y="80" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">SkewX = 0.1</text><polygon points="400.0,90.0 600.0,90.0 
660.0,290.0 460.0,290.0" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" 
opacity="1.0"/>
+<line x1="450.0" y1="90.0" x2="510.0" y2="290.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="500.0" y1="90.0" x2="560.0" y2="290.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="550.0" y1="90.0" x2="610.0" y2="290.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="415.0" y1="140.0" x2="615.0" y2="140.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="430.0" y1="190.0" x2="630.0" y2="190.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="445.0" y1="240.0" x2="645.0" y2="240.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/><line x1="400" y1="140" x2="415" y2="140" 
stroke="#D32F2F" stroke-width="1.2" stroke-dasharray="4,3"/><line x1="400" 
y1="190" x2="430" y2="190" stroke="#D32F2F" stroke-width="1.2" 
stroke-dasharray="4,3"/><line x1="400" y1="240" x2="445" y2="240" 
stroke="#D32F2F" stroke-width="1.2" stroke-dasharray="4,3"/><line x1="400" 
y1="290" x2="460" y2="290" stroke="#D32F2F" stroke-width="1.2" stroke- [...]
+<polygon points="460,315 454.1,318.8 454.1,311.2" fill="#D32F2F"/>
+<polygon points="400,315 405.9,311.2 405.9,318.8" fill="#D32F2F"/><text 
x="430.0" y="335" text-anchor="middle" font-size="11" fill="#D32F2F" 
font-weight="bold" font-style="normal">SkewX × 4 rows</text><line x1="400" 
y1="290" x2="400" y2="310" stroke="#D32F2F" stroke-width="1" 
stroke-dasharray="3,3"/><line x1="460" y1="290" x2="460" y2="310" 
stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><text x="350" y="355" 
text-anchor="middle" font-size="11" fill="#666" font-weight="normal"  [...]
\ No newline at end of file
diff --git a/docs/image/RS_SkewY/RS_SkewY.svg b/docs/image/RS_SkewY/RS_SkewY.svg
new file mode 100644
index 0000000000..5256e0ac01
--- /dev/null
+++ b/docs/image/RS_SkewY/RS_SkewY.svg
@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="700" height="370" viewBox="0 0 
700 370" font-family="Arial, Helvetica, sans-serif">
+<rect width="700" height="370" fill="white"/>
+<text x="350" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_SkewY</text><text x="350" y="48" 
text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Y skew: vertical shift per column</text><text x="160.0" 
y="80" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">SkewY = 0</text><rect x="60" y="90" width="200" 
height="200" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/>
+<line x1="110" y1="90" x2="110" y2="290" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="160" y1="90" x2="160" y2="290" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="210" y1="90" x2="210" y2="290" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="140" x2="260" y2="140" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="190" x2="260" y2="190" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="60" y1="240" x2="260" y2="240" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><text x="355" y="190.0" text-anchor="middle" font-size="28" 
fill="#333" font-weight="bold" font-style="normal">→</text><text x="500.0" 
y="80" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">SkewY = 0.2</text><polygon points="400.0,90.0 600.0,138.0 
600.0,338.0 400.0,290.0" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" 
opacity="1.0"/>
+<line x1="450.0" y1="102.0" x2="450.0" y2="302.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="500.0" y1="114.0" x2="500.0" y2="314.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="550.0" y1="126.0" x2="550.0" y2="326.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="400.0" y1="140.0" x2="600.0" y2="188.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="400.0" y1="190.0" x2="600.0" y2="238.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="400.0" y1="240.0" x2="600.0" y2="288.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/><line x1="620" y1="90" x2="620" y2="138" 
stroke="#D32F2F" stroke-width="2"/>
+<polygon points="620,138 616.2,132.1 623.8,132.1" fill="#D32F2F"/>
+<polygon points="620,90 623.8,95.9 616.2,95.9" fill="#D32F2F"/><text x="630" 
y="118.0" text-anchor="start" font-size="11" fill="#D32F2F" font-weight="bold" 
font-style="normal">SkewY × 4 cols</text><line x1="600" y1="90" x2="615" 
y2="90" stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><line 
x1="600" y1="138" x2="615" y2="138" stroke="#D32F2F" stroke-width="1" 
stroke-dasharray="3,3"/><text x="350" y="355" text-anchor="middle" 
font-size="11" fill="#666" font-weight="normal" font-s [...]
\ No newline at end of file
diff --git a/docs/image/RS_UpperLeftX/RS_UpperLeftX.svg 
b/docs/image/RS_UpperLeftX/RS_UpperLeftX.svg
new file mode 100644
index 0000000000..3b5b03143f
--- /dev/null
+++ b/docs/image/RS_UpperLeftX/RS_UpperLeftX.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="580" height="320" viewBox="0 0 
580 320" font-family="Arial, Helvetica, sans-serif">
+<rect width="580" height="320" fill="white"/>
+<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_UpperLeftX</text><text x="290" y="48" 
text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Returns the X coordinate of the upper-left 
corner</text><line x1="80" y1="260" x2="520" y2="260" stroke="#333" 
stroke-width="1.5"/>
+<polygon points="520,260 513.2,264.3 513.2,255.7" fill="#333"/><line x1="80" 
y1="260" x2="80" y2="60" stroke="#333" stroke-width="1.5"/>
+<polygon points="80,60 84.3,66.8 75.7,66.8" fill="#333"/><text x="525" y="265" 
text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">X</text><text x="68" y="55" text-anchor="middle" 
font-size="13" fill="#333" font-weight="bold" font-style="normal">Y</text><rect 
x="200" y="100" width="240" height="135" fill="#E3F2FD" stroke="#1565C0" 
stroke-width="1.5"/>
+<line x1="260" y1="100" x2="260" y2="235" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="320" y1="100" x2="320" y2="235" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="380" y1="100" x2="380" y2="235" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="200" y1="145" x2="440" y2="145" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="200" y1="190" x2="440" y2="190" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><circle cx="200" cy="100" r="5" fill="#FF8F00" stroke="white" 
stroke-width="1.5"/><line x1="200" y1="100" x2="200" y2="260" stroke="#D32F2F" 
stroke-width="1.5" stroke-dasharray="5,3"/><line x1="80" y1="255" x2="200" 
y2="255" stroke="#D32F2F" stroke-width="2"/>
+<polygon points="200,255 194.1,258.8 194.1,251.2" fill="#D32F2F"/>
+<polygon points="80,255 85.9,251.2 85.9,258.8" fill="#D32F2F"/><text x="140.0" 
y="282" text-anchor="middle" font-size="13" fill="#D32F2F" font-weight="bold" 
font-style="normal">UpperLeftX</text><text x="192" y="88" text-anchor="start" 
font-size="11" fill="#FF8F00" font-weight="bold" 
font-style="normal">(UpperLeftX, UpperLeftY)</text></svg>
\ No newline at end of file
diff --git a/docs/image/RS_UpperLeftY/RS_UpperLeftY.svg 
b/docs/image/RS_UpperLeftY/RS_UpperLeftY.svg
new file mode 100644
index 0000000000..a5859e26ac
--- /dev/null
+++ b/docs/image/RS_UpperLeftY/RS_UpperLeftY.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="580" height="320" viewBox="0 0 
580 320" font-family="Arial, Helvetica, sans-serif">
+<rect width="580" height="320" fill="white"/>
+<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_UpperLeftY</text><text x="290" y="48" 
text-anchor="middle" font-size="12" fill="#666" font-weight="normal" 
font-style="normal">Returns the Y coordinate of the upper-left 
corner</text><line x1="80" y1="260" x2="520" y2="260" stroke="#333" 
stroke-width="1.5"/>
+<polygon points="520,260 513.2,264.3 513.2,255.7" fill="#333"/><line x1="80" 
y1="260" x2="80" y2="60" stroke="#333" stroke-width="1.5"/>
+<polygon points="80,60 84.3,66.8 75.7,66.8" fill="#333"/><text x="525" y="265" 
text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">X</text><text x="68" y="55" text-anchor="middle" 
font-size="13" fill="#333" font-weight="bold" font-style="normal">Y</text><rect 
x="200" y="100" width="240" height="135" fill="#E3F2FD" stroke="#1565C0" 
stroke-width="1.5"/>
+<line x1="260" y1="100" x2="260" y2="235" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="320" y1="100" x2="320" y2="235" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="380" y1="100" x2="380" y2="235" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="200" y1="145" x2="440" y2="145" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="200" y1="190" x2="440" y2="190" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><circle cx="200" cy="100" r="5" fill="#FF8F00" stroke="white" 
stroke-width="1.5"/><line x1="200" y1="100" x2="80" y2="100" stroke="#D32F2F" 
stroke-width="1.5" stroke-dasharray="5,3"/><line x1="85" y1="260" x2="85" 
y2="100" stroke="#D32F2F" stroke-width="2"/>
+<polygon points="85,100 88.8,105.9 81.2,105.9" fill="#D32F2F"/>
+<polygon points="85,260 81.2,254.1 88.8,254.1" fill="#D32F2F"/><text x="72" 
y="184.0" text-anchor="end" font-size="13" fill="#D32F2F" font-weight="bold" 
font-style="normal">UpperLeftY</text><text x="208" y="88" text-anchor="start" 
font-size="11" fill="#FF8F00" font-weight="bold" 
font-style="normal">(UpperLeftX, UpperLeftY)</text></svg>
\ No newline at end of file
diff --git a/docs/image/RS_WorldToRasterCoordX/RS_WorldToRasterCoordX.svg 
b/docs/image/RS_WorldToRasterCoordX/RS_WorldToRasterCoordX.svg
new file mode 100644
index 0000000000..1ac04e0556
--- /dev/null
+++ b/docs/image/RS_WorldToRasterCoordX/RS_WorldToRasterCoordX.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="620" height="360" viewBox="0 0 
620 360" font-family="Arial, Helvetica, sans-serif">
+<rect width="620" height="360" fill="white"/>
+<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_WorldToRasterCoordX</text><text 
x="310" y="48" text-anchor="middle" font-size="12" fill="#666" 
font-weight="normal" font-style="normal">Returns the grid column (X) for given 
world coordinates</text><rect x="40" y="100" width="180" height="90" 
fill="#FFF3E0" stroke="#FF8F00" stroke-width="1.5" rx="6"/><text x="130" 
y="125" text-anchor="middle" font-size="12" fill="#333" font-weig [...]
+<polygon points="300,145 293.2,149.3 293.2,140.7" fill="#333"/><rect x="310" 
y="80" width="225" height="160" fill="#E3F2FD" stroke="#1565C0" 
stroke-width="1.5"/>
+<line x1="355" y1="80" x2="355" y2="240" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="400" y1="80" x2="400" y2="240" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="445" y1="80" x2="445" y2="240" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="490" y1="80" x2="490" y2="240" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="310" y1="120" x2="535" y2="120" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="310" y1="160" x2="535" y2="160" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="310" y1="200" x2="535" y2="200" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><text x="332.5" y="74" text-anchor="middle" font-size="11" 
fill="#333" font-weight="bold" font-style="normal">1</text><text x="377.5" 
y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" 
font-style="normal">2</text><text x="422.5" y="74" text-anchor="middle" 
font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text 
x="467.5" y="74" text-anchor="middle" f [...]
+<polygon points="450,255 442.9,258.7 443.6,250.2" fill="#D32F2F"/></svg>
\ No newline at end of file
diff --git a/docs/image/RS_WorldToRasterCoordY/RS_WorldToRasterCoordY.svg 
b/docs/image/RS_WorldToRasterCoordY/RS_WorldToRasterCoordY.svg
new file mode 100644
index 0000000000..fbcbd5d1c7
--- /dev/null
+++ b/docs/image/RS_WorldToRasterCoordY/RS_WorldToRasterCoordY.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="620" height="360" viewBox="0 0 
620 360" font-family="Arial, Helvetica, sans-serif">
+<rect width="620" height="360" fill="white"/>
+<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" 
font-weight="bold" font-style="normal">RS_WorldToRasterCoordY</text><text 
x="310" y="48" text-anchor="middle" font-size="12" fill="#666" 
font-weight="normal" font-style="normal">Returns the grid row (Y) for given 
world coordinates</text><rect x="40" y="100" width="180" height="90" 
fill="#FFF3E0" stroke="#FF8F00" stroke-width="1.5" rx="6"/><text x="130" 
y="125" text-anchor="middle" font-size="12" fill="#333" font-weight= [...]
+<polygon points="300,145 293.2,149.3 293.2,140.7" fill="#333"/><rect x="310" 
y="80" width="225" height="190" fill="#E3F2FD" stroke="#1565C0" 
stroke-width="1.5"/>
+<line x1="355" y1="80" x2="355" y2="270" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="400" y1="80" x2="400" y2="270" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="445" y1="80" x2="445" y2="270" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="490" y1="80" x2="490" y2="270" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="310" y1="118" x2="535" y2="118" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="310" y1="156" x2="535" y2="156" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="310" y1="194" x2="535" y2="194" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/>
+<line x1="310" y1="232" x2="535" y2="232" stroke="#1565C0" stroke-width="0.8" 
opacity="0.5"/><text x="332.5" y="74" text-anchor="middle" font-size="11" 
fill="#333" font-weight="bold" font-style="normal">1</text><text x="377.5" 
y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" 
font-style="normal">2</text><text x="422.5" y="74" text-anchor="middle" 
font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text 
x="467.5" y="74" text-anchor="middle" f [...]
+<polygon points="450,285 449.8,277.0 457.2,281.5" fill="#D32F2F"/></svg>
\ No newline at end of file
diff --git 
a/docs/image/Raster_Affine_Transformation/Raster_Affine_Transformation.svg 
b/docs/image/Raster_Affine_Transformation/Raster_Affine_Transformation.svg
new file mode 100644
index 0000000000..11e2a05d57
--- /dev/null
+++ b/docs/image/Raster_Affine_Transformation/Raster_Affine_Transformation.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="900" height="500" viewBox="0 0 
900 500" font-family="Arial, Helvetica, sans-serif">
+<rect width="900" height="500" fill="white"/>
+<text x="450" y="28" text-anchor="middle" font-size="18" fill="#333" 
font-weight="bold" font-style="normal">Raster Affine Transformation</text><text 
x="200" y="80" text-anchor="middle" font-size="14" fill="#333" 
font-weight="bold" font-style="normal">Affine Matrix</text><rect x="90" y="92" 
width="250" height="80" fill="#F5F5F5" stroke="#666" stroke-width="1" 
rx="4"/><text x="135" y="120" text-anchor="middle" font-size="13" 
fill="#1565C0" font-weight="bold" font-style="normal">ScaleX</tex [...]
+<polygon points="860,420 853.2,424.3 853.2,415.7" fill="#333"/><line x1="500" 
y1="420" x2="500" y2="70" stroke="#333" stroke-width="1.5"/>
+<polygon points="500,70 504.3,76.8 495.7,76.8" fill="#333"/><text x="865" 
y="425" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" 
font-style="normal">X</text><text x="488" y="68" text-anchor="middle" 
font-size="13" fill="#333" font-weight="bold" 
font-style="normal">Y</text><polygon points="540.0,140.0 790.0,180.0 
850.0,380.0 600.0,340.0" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" 
opacity="1.0"/>
+<line x1="590.0" y1="148.0" x2="650.0" y2="348.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="640.0" y1="156.0" x2="700.0" y2="356.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="690.0" y1="164.0" x2="750.0" y2="364.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="740.0" y1="172.0" x2="800.0" y2="372.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="555.0" y1="190.0" x2="805.0" y2="230.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="570.0" y1="240.0" x2="820.0" y2="280.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/>
+<line x1="585.0" y1="290.0" x2="835.0" y2="330.0" stroke="#1565C0" 
stroke-width="0.8" opacity="0.4"/><circle cx="540" cy="140" r="5" 
fill="#FF8F00" stroke="#FF8F00"/><line x1="540" y1="140" x2="540" y2="420" 
stroke="#FF8F00" stroke-width="1.2" stroke-dasharray="4,3"/><line x1="540" 
y1="140" x2="500" y2="140" stroke="#FF8F00" stroke-width="1.2" 
stroke-dasharray="4,3"/><text x="540" y="438" text-anchor="middle" 
font-size="11" fill="#FF8F00" font-weight="bold" font-style="normal">UpperLeftX 
[...]
+<polygon points="590,122 584.1,125.8 584.1,118.2" fill="#1565C0"/>
+<polygon points="540,122 545.9,118.2 545.9,125.8" fill="#1565C0"/><text 
x="565.0" y="114" text-anchor="middle" font-size="12" fill="#1565C0" 
font-weight="bold" font-style="normal">ScaleX</text><line x1="522" y1="140" 
x2="522" y2="190" stroke="#1565C0" stroke-width="2"/>
+<polygon points="522,190 518.2,184.1 525.8,184.1" fill="#1565C0"/>
+<polygon points="522,140 525.8,145.9 518.2,145.9" fill="#1565C0"/><text 
x="514" y="169.0" text-anchor="end" font-size="12" fill="#1565C0" 
font-weight="bold" font-style="normal">ScaleY</text><line x1="540" y1="140" 
x2="540" y2="190" stroke="#00796B" stroke-width="1" stroke-dasharray="4,3" 
opacity="0.6"/><line x1="540" y1="208" x2="555" y2="208" stroke="#00796B" 
stroke-width="1.8"/>
+<polygon points="555,208 549.1,211.8 549.1,204.2" fill="#00796B"/>
+<polygon points="540,208 545.9,204.2 545.9,211.8" fill="#00796B"/><text 
x="547.5" y="224" text-anchor="middle" font-size="11" fill="#00796B" 
font-weight="bold" font-style="normal">SkewX</text><line x1="540" y1="140" 
x2="590" y2="140" stroke="#00796B" stroke-width="1" stroke-dasharray="4,3" 
opacity="0.6"/><line x1="608" y1="140" x2="608" y2="148" stroke="#00796B" 
stroke-width="1.8"/>
+<polygon points="608,148 604.2,142.1 611.8,142.1" fill="#00796B"/>
+<polygon points="608,140 611.8,145.9 604.2,145.9" fill="#00796B"/><text 
x="616" y="148.0" text-anchor="start" font-size="11" fill="#00796B" 
font-weight="bold" font-style="normal">SkewY</text><rect x="50" y="438" 
width="12" height="12" fill="#1565C0" rx="2"/><text x="70" y="450" 
text-anchor="start" font-size="11" fill="#333" font-weight="normal" 
font-style="normal">Scale (pixel size)</text><rect x="200" y="438" width="12" 
height="12" fill="#00796B" rx="2"/><text x="220" y="450" text-ancho [...]
\ No newline at end of file

Reply via email to