oxigdal_algorithms/vector/
mod.rs1mod area;
90mod buffer;
91mod centroid;
92pub mod clipping;
93pub mod clustering;
94mod contains;
95pub mod de9im;
96pub mod delaunay;
97mod difference;
98mod distance;
99mod douglas_peucker;
100mod envelope;
101pub mod geodesic;
102mod intersection;
103mod length;
104pub mod network;
105pub mod pool;
106mod repair;
107mod simplify;
108pub mod spatial_join;
109pub mod topology;
110mod topology_simplify;
111mod transform;
112mod union_ops;
113mod valid;
114pub mod voronoi;
115
116pub use oxigdal_core::vector::{Coordinate, LineString, MultiPolygon, Point, Polygon};
118
119pub use area::{
121 AreaMethod, area, area_multipolygon, area_polygon, is_clockwise, is_counter_clockwise,
122};
123
124pub use buffer::{
126 BufferCapStyle, BufferJoinStyle, BufferOptions, buffer_linestring, buffer_linestring_pooled,
127 buffer_point, buffer_point_pooled, buffer_polygon, buffer_polygon_pooled,
128};
129
130pub use centroid::{
132 centroid, centroid_collection, centroid_linestring, centroid_multilinestring,
133 centroid_multipoint, centroid_multipolygon, centroid_point, centroid_polygon,
134};
135
136pub use contains::{
138 ContainsPredicate, CrossesPredicate, IntersectsPredicate, OverlapsPredicate, TouchesPredicate,
139 contains, crosses, disjoint, intersects, overlaps, point_in_polygon_or_boundary,
140 point_on_polygon_boundary, point_strictly_inside_polygon, touches, within,
141};
142
143pub use de9im::{
145 CoveredByPredicate, CoversPredicate, De9im, Dimension, EqualsPredicate, relate,
146 relate_line_polygon, relate_point_polygon, relate_polygons,
147};
148
149pub use difference::{
151 clip_to_box, difference_polygon, difference_polygon_pooled, difference_polygons,
152 difference_polygons_pooled, erase_small_holes, symmetric_difference,
153 symmetric_difference_pooled,
154};
155
156pub use distance::{
158 DistanceMethod, distance_point_to_linestring, distance_point_to_point,
159 distance_point_to_polygon,
160};
161
162pub use douglas_peucker::simplify_linestring as simplify_linestring_dp;
164
165pub use envelope::{
167 envelope, envelope_collection, envelope_contains_point, envelope_intersection,
168 envelope_linestring, envelope_multilinestring, envelope_multipoint, envelope_multipolygon,
169 envelope_point, envelope_polygon, envelope_union, envelope_with_buffer, envelopes_intersect,
170};
171
172pub use intersection::{
174 SegmentIntersection, intersect_linestrings, intersect_linestrings_sweep, intersect_polygons,
175 intersect_polygons_pooled, intersect_segment_segment, point_in_polygon,
176};
177
178pub use length::{
180 LengthMethod, length, length_linestring, length_linestring_3d, length_multilinestring,
181};
182
183pub use simplify::{SimplifyMethod, simplify_linestring, simplify_polygon};
185
186pub use topology_simplify::{
188 TopologySimplifyOptions, simplify_topology, simplify_topology_with_options,
189};
190
191pub use union_ops::{
193 cascaded_union, cascaded_union_pooled, convex_hull, convex_hull_pooled, merge_polygons,
194 union_polygon, union_polygon_pooled, union_polygons, union_polygons_pooled,
195};
196
197pub use pool::{
199 Pool, PoolGuard, PoolStats, clear_all_pools, get_pool_stats, get_pooled_coordinate_vec,
200 get_pooled_linestring, get_pooled_point, get_pooled_polygon,
201};
202
203pub use valid::{
205 IssueType, Severity, ValidationIssue, validate_geometry, validate_linestring, validate_polygon,
206};
207
208pub use repair::{
210 RepairOptions, close_ring, fix_self_intersection, remove_collinear_vertices,
211 remove_duplicate_vertices, remove_spikes, repair_linestring, repair_linestring_with_options,
212 repair_polygon, repair_polygon_with_options, reverse_ring,
213};
214
215pub use clipping::{ClipOperation, clip_multi, clip_polygons};
217
218pub use transform::{
220 CommonCrs, CrsTransformer, transform_geometry, transform_linestring, transform_point,
221 transform_polygon,
222};
223
224#[cfg(test)]
225mod tests {
226 use super::*;
227
228 #[test]
229 fn test_point_distance() {
230 let p1 = Coordinate::new_2d(0.0, 0.0);
231 let p2 = Coordinate::new_2d(3.0, 4.0);
232 let dx = p1.x - p2.x;
233 let dy = p1.y - p2.y;
234 let dist = (dx * dx + dy * dy).sqrt();
235 assert!((dist - 5.0).abs() < 1e-10);
236 }
237
238 #[test]
239 fn test_linestring_construction() {
240 let coords = vec![
241 Coordinate::new_2d(0.0, 0.0),
242 Coordinate::new_2d(3.0, 0.0),
243 Coordinate::new_2d(3.0, 4.0),
244 ];
245 let result = LineString::new(coords);
246 assert!(result.is_ok());
247 if let Ok(line) = result {
248 assert_eq!(line.len(), 3);
249 }
250 }
251
252 #[test]
253 fn test_polygon_construction() {
254 let coords = vec![
256 Coordinate::new_2d(0.0, 0.0),
257 Coordinate::new_2d(10.0, 0.0),
258 Coordinate::new_2d(10.0, 10.0),
259 Coordinate::new_2d(0.0, 10.0),
260 Coordinate::new_2d(0.0, 0.0),
261 ];
262 let exterior = LineString::new(coords);
263 assert!(exterior.is_ok());
264 if let Ok(ext) = exterior {
265 let poly = Polygon::new(ext, vec![]);
266 assert!(poly.is_ok());
267 }
268 }
269}