You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ji...@apache.org on 2026/03/07 00:23:24 UTC

(sedona) branch fix/issue-2678-phase13 created (now 9205e53e57)

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

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


      at 9205e53e57 [DOCS] Add SVG visuals for raster affine transformation functions (Phase 13)

This branch includes the following new commits:

     new 9205e53e57 [DOCS] Add SVG visuals for raster affine transformation functions (Phase 13)

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(sedona) 01/01: [DOCS] Add SVG visuals for raster affine transformation functions (Phase 13)

Posted by ji...@apache.org.
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 <ji...@apache.org>
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