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

imbruced pushed a commit to branch add-sedona-serializer
in repository https://gitbox.apache.org/repos/asf/sedona-db.git

commit fd739ab31b933fc459bad3c13465b92e2eec9322
Author: pawelkocinski <[email protected]>
AuthorDate: Fri Dec 19 00:27:29 2025 +0100

    restructure files
---
 rust/sedona-functions/src/st_to_sedona_spark.rs | 31 +++++++++++++++++++++++--
 rust/sedona-serde/src/serialize.rs              |  6 ++---
 2 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/rust/sedona-functions/src/st_to_sedona_spark.rs 
b/rust/sedona-functions/src/st_to_sedona_spark.rs
index ceac7446..e5a77e41 100644
--- a/rust/sedona-functions/src/st_to_sedona_spark.rs
+++ b/rust/sedona-functions/src/st_to_sedona_spark.rs
@@ -38,8 +38,15 @@ impl SedonaScalarKernel for STGeomToSedonaSpark {
             SedonaType::Wkb(_, crs) => {
                 match crs {
                     Some(_crs) => {
-                        Ok(Some(4326))
-                    },
+                        let crs_id = _crs.srid()?;
+
+                        match crs_id {
+                            Some(srid) => Ok(Some(srid)),
+                            None => 
Err(datafusion_common::DataFusionError::Internal(
+                                "ST_GeomToSedonaSpark: Unsupported CRS without 
SRID".to_string(),
+                            )),
+                        }
+                    }
                     None => Ok(None),
                 }
                 //
@@ -93,6 +100,7 @@ mod tests {
     use crate::st_to_sedona_spark::st_geomtosedona_udf;
     use datafusion_common::ScalarValue;
     use rstest::rstest;
+    use sedona_schema::crs::{deserialize_crs, lnglat};
     use sedona_schema::datatypes::{Edges, SedonaType};
     use sedona_testing::create::create_scalar;
     use sedona_testing::testers::ScalarUdfTester;
@@ -206,4 +214,23 @@ mod tests {
 
         assert_eq!(result, ScalarValue::Binary(Some(binary_geometry)));
     }
+
+    #[test]
+    fn test_serialization_with_crs() {
+        let crs = deserialize_crs("EPSG:4326").unwrap(); // to ensure Crs can 
be deserialized to provide
+
+        let tester = ScalarUdfTester::new(
+            st_geomtosedona_udf().into(),
+            vec![SedonaType::Wkb(Edges::Planar, crs.clone())],
+        );
+
+        let geometry = create_scalar(Some(POINT_WKT), 
&SedonaType::Wkb(Edges::Planar, crs));
+
+        let result = tester.invoke_scalar(geometry).unwrap();
+
+        let expected_fixture = include_str!("fixtures/crs_point.sedona");
+        let binary_geometry = fixture_to_bytes(expected_fixture);
+
+        assert_eq!(result, ScalarValue::Binary(Some(binary_geometry)));
+    }
 }
diff --git a/rust/sedona-serde/src/serialize.rs 
b/rust/sedona-serde/src/serialize.rs
index 0f8a4941..fe73a9c7 100644
--- a/rust/sedona-serde/src/serialize.rs
+++ b/rust/sedona-serde/src/serialize.rs
@@ -4,14 +4,14 @@ use crate::polygon::{serialize_multipolygon, 
serialize_polygon};
 use arrow_array::builder::BinaryBuilder;
 use byteorder::{ByteOrder, LittleEndian, ReadBytesExt, WriteBytesExt};
 use datafusion_common::DataFusionError;
-use std::io::{Cursor};
+use std::io::Cursor;
 use wkb::reader::Wkb;
 use wkt::types::Dimension;
 
 pub fn serialize(
     wkb: &Wkb,
     builder: &mut BinaryBuilder,
-    epsg_crs: Option<i32>,
+    epsg_crs: Option<u32>,
 ) -> datafusion_common::Result<()> {
     use std::io::Cursor;
     let mut cursor = Cursor::new(wkb.buf());
@@ -35,7 +35,7 @@ pub fn serialize(
 pub fn write_geometry<IN: ByteOrder, OUT: ByteOrder>(
     builder: &mut BinaryBuilder,
     cursor: &mut Cursor<&[u8]>,
-    epsg_crs: Option<i32>,
+    epsg_crs: Option<u32>,
 ) -> datafusion_common::Result<()> {
     let geometry_type = cursor.read_u32::<IN>()?;
     verify_geometry_type(geometry_type)?;

Reply via email to