mod area;
mod buffer;
mod centroid;
pub mod clipping;
pub mod clustering;
mod contains;
pub mod de9im;
pub mod delaunay;
mod difference;
mod distance;
mod douglas_peucker;
mod envelope;
pub mod geodesic;
mod intersection;
mod length;
pub mod network;
pub mod pool;
mod repair;
mod simplify;
pub mod spatial_join;
pub mod topology;
mod topology_simplify;
mod transform;
mod union_ops;
mod valid;
pub mod voronoi;
pub use oxigdal_core::vector::{Coordinate, LineString, MultiPolygon, Point, Polygon};
pub use area::{
AreaMethod, area, area_multipolygon, area_polygon, is_clockwise, is_counter_clockwise,
};
pub use buffer::{
BufferCapStyle, BufferJoinStyle, BufferOptions, buffer_linestring, buffer_linestring_pooled,
buffer_point, buffer_point_pooled, buffer_polygon, buffer_polygon_pooled,
};
pub use centroid::{
centroid, centroid_collection, centroid_linestring, centroid_multilinestring,
centroid_multipoint, centroid_multipolygon, centroid_point, centroid_polygon,
};
pub use contains::{
ContainsPredicate, CrossesPredicate, IntersectsPredicate, OverlapsPredicate, TouchesPredicate,
contains, crosses, disjoint, intersects, overlaps, point_in_polygon_or_boundary,
point_on_polygon_boundary, point_strictly_inside_polygon, touches, within,
};
pub use de9im::{
CoveredByPredicate, CoversPredicate, De9im, Dimension, EqualsPredicate, relate,
relate_line_polygon, relate_point_polygon, relate_polygons,
};
pub use difference::{
clip_to_box, difference_polygon, difference_polygon_pooled, difference_polygons,
difference_polygons_pooled, erase_small_holes, symmetric_difference,
symmetric_difference_pooled,
};
pub use distance::{
DistanceMethod, distance_point_to_linestring, distance_point_to_point,
distance_point_to_polygon,
};
pub use douglas_peucker::simplify_linestring as simplify_linestring_dp;
pub use envelope::{
envelope, envelope_collection, envelope_contains_point, envelope_intersection,
envelope_linestring, envelope_multilinestring, envelope_multipoint, envelope_multipolygon,
envelope_point, envelope_polygon, envelope_union, envelope_with_buffer, envelopes_intersect,
};
pub use intersection::{
SegmentIntersection, intersect_linestrings, intersect_linestrings_sweep, intersect_polygons,
intersect_polygons_pooled, intersect_segment_segment, point_in_polygon,
};
pub use length::{
LengthMethod, length, length_linestring, length_linestring_3d, length_multilinestring,
};
pub use simplify::{SimplifyMethod, simplify_linestring, simplify_polygon};
pub use topology_simplify::{
TopologySimplifyOptions, simplify_topology, simplify_topology_with_options,
};
pub use union_ops::{
cascaded_union, cascaded_union_pooled, convex_hull, convex_hull_pooled, merge_polygons,
union_polygon, union_polygon_pooled, union_polygons, union_polygons_pooled,
};
pub use pool::{
Pool, PoolGuard, PoolStats, clear_all_pools, get_pool_stats, get_pooled_coordinate_vec,
get_pooled_linestring, get_pooled_point, get_pooled_polygon,
};
pub use valid::{
IssueType, Severity, ValidationIssue, validate_geometry, validate_linestring, validate_polygon,
};
pub use repair::{
RepairOptions, close_ring, fix_self_intersection, remove_collinear_vertices,
remove_duplicate_vertices, remove_spikes, repair_linestring, repair_linestring_with_options,
repair_polygon, repair_polygon_with_options, reverse_ring,
};
pub use clipping::{ClipOperation, clip_multi, clip_polygons};
pub use transform::{
CommonCrs, CrsTransformer, transform_geometry, transform_linestring, transform_point,
transform_polygon,
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_point_distance() {
let p1 = Coordinate::new_2d(0.0, 0.0);
let p2 = Coordinate::new_2d(3.0, 4.0);
let dx = p1.x - p2.x;
let dy = p1.y - p2.y;
let dist = (dx * dx + dy * dy).sqrt();
assert!((dist - 5.0).abs() < 1e-10);
}
#[test]
fn test_linestring_construction() {
let coords = vec![
Coordinate::new_2d(0.0, 0.0),
Coordinate::new_2d(3.0, 0.0),
Coordinate::new_2d(3.0, 4.0),
];
let result = LineString::new(coords);
assert!(result.is_ok());
if let Ok(line) = result {
assert_eq!(line.len(), 3);
}
}
#[test]
fn test_polygon_construction() {
let coords = vec![
Coordinate::new_2d(0.0, 0.0),
Coordinate::new_2d(10.0, 0.0),
Coordinate::new_2d(10.0, 10.0),
Coordinate::new_2d(0.0, 10.0),
Coordinate::new_2d(0.0, 0.0),
];
let exterior = LineString::new(coords);
assert!(exterior.is_ok());
if let Ok(ext) = exterior {
let poly = Polygon::new(ext, vec![]);
assert!(poly.is_ok());
}
}
}