Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions c/sedona-geos/benches/geos-functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,13 +237,13 @@ fn criterion_benchmark(c: &mut Criterion) {
benchmark::scalar(c, &f, "geos", "st_length", LineString(500));

benchmark::scalar(c, &f, "geos", "st_makevalid", Polygon(10));
benchmark::scalar(c, &f, "geos", "st_makevalid", Polygon(10));
benchmark::scalar(c, &f, "geos", "st_makevalid", Polygon(100));

benchmark::scalar(c, &f, "geos", "st_minimumclearance", Polygon(10));
benchmark::scalar(c, &f, "geos", "st_minimumclearance", Polygon(10));

benchmark::scalar(c, &f, "geos", "st_minimumclearanceline", LineString(10));
benchmark::scalar(c, &f, "geos", "st_minimumclearanceline", LineString(500));
benchmark::scalar(c, &f, "geos", "st_minimumclearanceline", LineString(50));

benchmark::scalar(
c,
Expand All @@ -263,6 +263,9 @@ fn criterion_benchmark(c: &mut Criterion) {
benchmark::scalar(c, &f, "geos", "st_perimeter", Polygon(10));
benchmark::scalar(c, &f, "geos", "st_perimeter", Polygon(500));

benchmark::scalar(c, &f, "geos", "st_polygonize", LineString(10));
benchmark::scalar(c, &f, "geos", "st_polygonize", LineString(500));

benchmark::scalar(
c,
&f,
Expand All @@ -278,6 +281,22 @@ fn criterion_benchmark(c: &mut Criterion) {
ArrayScalar(Polygon(500), Float64(1.0, 10.0)),
);

benchmark::scalar(
c,
&f,
"geos",
"st_simplifypreservetopology",
ArrayScalar(Polygon(10), Float64(1.0, 10.0)),
);

benchmark::scalar(
c,
&f,
"geos",
"st_simplifypreservetopology",
ArrayScalar(Polygon(25), Float64(1.0, 10.0)),
);

benchmark::scalar(
c,
&f,
Expand Down
8 changes: 3 additions & 5 deletions c/sedona-geos/src/overlay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ use sedona_schema::{
};

use crate::executor::GeosExecutor;
use crate::geos_to_wkb::write_geos_geometry;

pub fn st_intersection_impl() -> ScalarKernelRef {
Arc::new(BinaryOverlay {
Expand Down Expand Up @@ -107,11 +108,8 @@ where
))
})?;

let wkb = geom.to_wkb().map_err(|e| {
DataFusionError::Execution(format!("Failed to convert to WKB: {e}"))
})?;

builder.append_value(&wkb);
write_geos_geometry(&geom, &mut builder)?;
builder.append_value(vec![]);
}
_ => builder.append_null(),
};
Expand Down
7 changes: 2 additions & 5 deletions c/sedona-geos/src/st_makevalid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ use sedona_schema::{
};

use crate::executor::GeosExecutor;
use crate::geos_to_wkb::write_geos_geometry;

/// ST_MakeValid() implementation using the geos crate
pub fn st_make_valid_impl() -> ScalarKernelRef {
Expand Down Expand Up @@ -77,11 +78,7 @@ fn invoke_scalar(geos_geom: &geos::Geometry, writer: &mut impl std::io::Write) -
.make_valid()
.map_err(|e| DataFusionError::Execution(format!("Failed to make geometry valid: {e}")))?;

let wkb = geometry
.to_wkb()
.map_err(|e| DataFusionError::Execution(format!("Failed to convert to wkb: {e}")))?;

writer.write_all(wkb.as_ref())?;
write_geos_geometry(&geometry, writer)?;
Ok(())
}

Expand Down
7 changes: 2 additions & 5 deletions c/sedona-geos/src/st_minimumclearance_line.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ use sedona_schema::{
};

use crate::executor::GeosExecutor;
use crate::geos_to_wkb::write_geos_geometry;

/// ST_MinimumClearanceLine() implementation using the geos crate
pub fn st_minimum_clearance_line_impl() -> ScalarKernelRef {
Expand Down Expand Up @@ -79,11 +80,7 @@ fn invoke_scalar(geos_geom: &geos::Geometry, writer: &mut impl std::io::Write) -
))
})?;

let wkb = geometry
.to_wkb()
.map_err(|e| DataFusionError::Execution(format!("Failed to convert to wkb: {e}")))?;

writer.write_all(wkb.as_ref())?;
write_geos_geometry(&geometry, writer)?;
Ok(())
}

Expand Down
9 changes: 2 additions & 7 deletions c/sedona-geos/src/st_polygonize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ use std::sync::Arc;
use arrow_array::builder::BinaryBuilder;
use datafusion_common::{DataFusionError, Result};
use datafusion_expr::ColumnarValue;
use geos::Geom;
use sedona_expr::scalar_udf::{ScalarKernelRef, SedonaScalarKernel};
use sedona_geometry::wkb_factory::WKB_MIN_PROBABLE_BYTES;
use sedona_schema::{
Expand All @@ -29,6 +28,7 @@ use sedona_schema::{
};

use crate::executor::GeosExecutor;
use crate::geos_to_wkb::write_geos_geometry;

/// ST_Polygonize() scalar implementation using GEOS
pub fn st_polygonize_impl() -> ScalarKernelRef {
Expand Down Expand Up @@ -74,12 +74,7 @@ fn invoke_scalar(geos_geom: &geos::Geometry, writer: &mut impl std::io::Write) -
let result = geos::Geometry::polygonize(&[geos_geom])
.map_err(|e| DataFusionError::Execution(format!("Failed to polygonize: {e}")))?;

let wkb = result
.to_wkb()
.map_err(|e| DataFusionError::Execution(format!("Failed to convert result to WKB: {e}")))?;
writer
.write_all(wkb.as_ref())
.map_err(|e| DataFusionError::Execution(format!("Failed to write result WKB: {e}")))?;
write_geos_geometry(&result, writer)?;

Ok(())
}
Expand Down
8 changes: 2 additions & 6 deletions c/sedona-geos/src/st_simplifypreservetopology.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ use datafusion_common::cast::as_float64_array;
use datafusion_common::error::Result;
use datafusion_common::DataFusionError;
use datafusion_expr::ColumnarValue;
use geos::Geom;
use sedona_expr::scalar_udf::{ScalarKernelRef, SedonaScalarKernel};
use sedona_geometry::wkb_factory::WKB_MIN_PROBABLE_BYTES;
use sedona_schema::{
Expand All @@ -32,6 +31,7 @@ use sedona_schema::{
};

use crate::executor::GeosExecutor;
use crate::geos_to_wkb::write_geos_geometry;

/// ST_SimplifyPreserveTopology() implementation using the geos crate
pub fn st_simplify_preserve_topology_impl() -> ScalarKernelRef {
Expand Down Expand Up @@ -94,11 +94,7 @@ fn invoke_scalar(
.topology_preserve_simplify(tolerance)
.map_err(|e| DataFusionError::Execution(format!("Failed to simplify geometry: {e}")))?;

let wkb = geometry
.to_wkb()
.map_err(|e| DataFusionError::Execution(format!("Failed to convert to wkb: {e}")))?;

writer.write_all(wkb.as_ref())?;
write_geos_geometry(&geometry, writer)?;
Ok(())
}

Expand Down