SciRS2 Spatial
scirs2-spatial is the spatial algorithms and computational geometry crate for the SciRS2 scientific computing library. It provides spatial data structures, distance metrics, geometric algorithms, geospatial utilities, and path planning tools modeled after SciPy's spatial module.
What scirs2-spatial Provides
Use scirs2-spatial when you need to:
- Query nearest neighbors efficiently in 2D, 3D, or high-dimensional spaces
- Compute pairwise distance matrices with many distance metrics
- Build Voronoi diagrams, Delaunay triangulations, or convex hulls
- Work with geospatial data (geodesic distances, map projections, Moran's I)
- Perform spatial joins or grid-based indexing
- Analyze trajectories or point clouds
- Plan paths in continuous space (A*, RRT)
- Apply 3D transformations (quaternions, rigid transforms, SLERP)
Features (v0.3.0)
Spatial Data Structures
- KD-Tree: Efficient k-nearest neighbor and radius search in any dimension
- Ball Tree: Optimized for high-dimensional data (>10D)
- R-Tree*: Improved R-tree variant for spatial indexing of 2D/3D bounding boxes
- Octree: 3D spatial partitioning for point clouds
- Quadtree: 2D spatial partitioning
- Grid Index: Hash-grid for fast spatial lookup at fixed resolution
Distance Metrics (20+ metrics)
- Euclidean, Manhattan (L1), Chebyshev (L-inf), Minkowski
- Mahalanobis (covariance-weighted)
- Cosine, correlation, Canberra
- Hamming, Jaccard, Bray-Curtis
- SIMD-accelerated computation for f32 and f64
- Pairwise distance matrices (
pdist,cdist,squareform)
Set-Based Distances
- Hausdorff distance (directed and symmetric)
- Wasserstein distance (Earth Mover's Distance)
- Gromov-Hausdorff distance (metric space comparison)
Computational Geometry
- Convex hull (2D and 3D) with degenerate case handling
- Delaunay triangulation with numerical stability
- Voronoi diagrams via Fortune's sweep line algorithm
- Alpha shapes and halfspace intersection
- Polygon operations (point-in-polygon, area, centroid, boolean ops)
- 3D convex hull (incremental algorithm)
Geospatial Data
- Geodesic distance calculations (Haversine, Vincenty)
- Map projections (Mercator, Lambert, equirectangular)
- Geographic coordinate system conversions (WGS84, UTM)
- Topography analysis (slope, aspect, curvature)
- Spatial statistics: Moran's I (spatial autocorrelation), Ripley's K function
Spatial Join Operations
- Point-in-polygon join
- Distance-based spatial join
- Nearest-neighbor spatial join between two datasets
Voronoi Diagrams
- Fortune's sweep line algorithm for exact 2D Voronoi
- Handles degenerate inputs (collinear points, coincident points)
- Furthest-site Voronoi variant
Trajectory Analysis
- Trajectory smoothing and simplification (Ramer-Douglas-Peucker)
- Frechet distance between trajectories
- Dynamic time warping (DTW) for trajectory similarity
- Speed, acceleration, and curvature analysis
Point Cloud Processing
- Normal estimation via PCA
- Outlier removal (statistical, radius-based)
- Voxel grid downsampling
- Point cloud registration (ICP - see scirs2-vision for full pipeline)
Path Planning
- A* on grids and continuous spaces
- RRT (Rapidly-exploring Random Tree)
- RRT* (asymptotically optimal)
- Probabilistic Roadmap Method (PRM)
- Visibility graphs
- Dubins and Reeds-Shepp paths for car-like robots
3D Transformations
- Rotation representations: quaternions, rotation matrices, Euler angles
- Rigid body transforms and pose composition
- Spherical coordinate transformations
- SLERP rotation interpolation and rotation splines
- Procrustes analysis (shape alignment)
Spatial Interpolation
- Kriging (Simple and Ordinary)
- Inverse Distance Weighting (IDW)
- Radial Basis Functions (RBF)
- Natural neighbor interpolation
- Shepard's method
Geometric Algorithms
- Sweep line algorithms for line segment intersection
- Point location in planar subdivisions
- Arrangement computation
- Simplification of polylines and polygons (Visvalingam-Whyatt)
Collision Detection
- Primitive shape collision (circles, spheres, AABB, OBB)
- Continuous collision detection (swept volumes)
- Broad-phase (BVH) and narrow-phase algorithms
Installation
[]
= "0.3.0"
For parallel processing:
[]
= { = "0.3.0", = ["parallel"] }
Quick Start
KD-Tree Nearest Neighbor Search
use KDTree;
use array;
use CoreResult;
Distance Metrics
use distance;
use CoreResult;
Pairwise Distance Matrix
use distance;
use array;
use CoreResult;
Voronoi Diagram
use Voronoi;
use array;
use CoreResult;
Geospatial Distance
use ;
use CoreResult;
Spatial Statistics (Moran's I)
use morans_i;
use CoreResult;
R*-Tree Spatial Index
use RStarTree;
use CoreResult;
Feature Flags
| Flag | Description |
|---|---|
parallel |
Enable Rayon-based parallel distance matrix computation |
Performance
- SIMD-accelerated distance metrics (Euclidean, Manhattan, Chebyshev): up to 2x speedup for f32
- 1.5-25 million distance calculations per second (hardware dependent)
- KD-Tree: 20K+ nearest-neighbor queries per second (10K point dataset)
- Linear memory scaling with point count
Documentation
Full API reference: docs.rs/scirs2-spatial
Compatibility
The API is modeled after SciPy's scipy.spatial module. Key equivalents:
| SciRS2 | SciPy |
|---|---|
KDTree::new() |
scipy.spatial.KDTree() |
distance::pdist() |
scipy.spatial.distance.pdist() |
distance::cdist() |
scipy.spatial.distance.cdist() |
Voronoi::new() |
scipy.spatial.Voronoi() |
ConvexHull::new() |
scipy.spatial.ConvexHull() |
Delaunay::new() |
scipy.spatial.Delaunay() |
License
Licensed under the Apache License 2.0. See LICENSE for details.