22 releases (11 breaking)

0.12.0 Jan 28, 2024
0.11.0 May 31, 2023
0.10.0 Jan 31, 2023
0.9.3 Apr 6, 2022
0.1.0 Nov 22, 2018

#15 in Algorithms

Download history 32186/week @ 2024-01-02 35843/week @ 2024-01-09 37849/week @ 2024-01-16 36385/week @ 2024-01-23 35043/week @ 2024-01-30 44384/week @ 2024-02-06 52538/week @ 2024-02-13 54034/week @ 2024-02-20 52156/week @ 2024-02-27 53395/week @ 2024-03-05 53355/week @ 2024-03-12 46900/week @ 2024-03-19 37407/week @ 2024-03-26 44326/week @ 2024-04-02 44734/week @ 2024-04-09 39154/week @ 2024-04-16

174,373 downloads per month
Used in 234 crates (43 directly)

MIT/Apache

180KB
3.5K SLoC

rstar

A flexible, n-dimensional r*-tree implementation for the Rust ecosystem, suitable for use as a spatial index.

Features

  • A flexible r*-tree written in safe rust
  • Supports custom point types
  • Supports the insertion of user defined types
  • Supported operations:
    • Insertion
    • Rectangle queries
    • Nearest neighbor
    • Nearest neighbor iteration
    • Locate at point
    • Element removal
    • Efficient bulk loading
  • Features geometric primitives that can readily be inserted into an r-tree:
    • Points (arrays with a constant size)
    • Lines
    • Rectangles
  • Small number of dependencies
  • Serde support with the serde feature
  • no_std compatible (but requires alloc)

Geometries

Primitives are provided for point, line, and rectangle geometries. The geo crate uses rstar as an efficient spatial index and provides RTreeObject implementations for storing complex geometries such as linestrings and polygons.

Benchmarks

All benchmarks are performed on a i7-8550U CPU @ 1.80Ghz and with uniformly distributed points. The underlying point type is [f64; 2].

Benchmark Tree size Time
bulk loading 2000 229.82 us
sequentially loading 2000 1.4477 ms
nearest neighbor (bulk loaded tree) 100k 1.32 us
nearest neighbor (sequential tree) 100k 1.56 us
successful point lookup 100k 177.32 ns
unsuccessful point lookup 100k 273.51 ns

Project state

The project is being actively developed, feature requests and PRs are welcome!

Documentation

The documentation is hosted on docs.rs.

Release Checklist

The crate can be published by the rstar-publishers team of georust. Please follow the steps below while publishing a new release.

  1. Create branch from master, say release/<version>.
  2. Ensure rstar/CHANGELOG.md describes all the changes since last release (esp. the breaking ones).
  3. Ensure / set version metadata in Cargo.toml of rstar to the new version.
  4. Create PR to master, have it approved and merge.
  5. Checkout the updated master, go to rstar directory and run cargo publish.
  6. Create tag <version> and push to georust/rstar

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1.5MB
~27K SLoC