1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//! # Supercluster
//!
//! A high-performance Rust crate for geospatial and non-geospatial point clustering.
//!
//!
//! ## Reference implementation
//! [](https://github.com/chargetrip/supercluster-rs/actions/workflows/test.yml)
//! [](https://docs.rs/supercluster)
//! [](https://crates.io/crates/supercluster)
//! 
//! 
//! [](https://codecov.io/gh/chargetrip/supercluster-rs)
//!
//! 
//!
//! ## Documentation
//!
//! If you encounter any issues or have questions that are not addressed in the documentation, feel free to [submit an issue](https://github.com/chargetrip/supercluster-rs/issues).
//! This crate was initially inspired by Mapbox's supercluster [blog post](https://blog.mapbox.com/clustering-millions-of-points-on-a-map-with-supercluster-272046ec5c97).
//!
//! ## Usage
//!
//! To use the `supercluster` crate in your project, add it to your `Cargo.toml`:
//!
//! ```toml
//! [dependencies]
//! supercluster = "3.0.4"
//! ```
//!
//! You can also include additional features, such as logging, by specifying them in your `Cargo.toml`:
//!
//! ```toml
//! [dependencies]
//! supercluster = { version = "3.0.4", features = ["log", "serde", "cluster_metadata"] }
//! ```
//!
//! Below is an example of how to create and run a supercluster using the crate.
//!
//! This example demonstrates how to build supercluster options, create a new supercluster, and get a tile.
//!
//! ```rust
//! use supercluster::{ CoordinateSystem, Supercluster, SuperclusterError };
//!
//! fn main() -> Result<(), SuperclusterError> {
//! // Set the configuration settings
//! let options = Supercluster::builder()
//! .radius(40.0)
//! .extent(512.0)
//! .min_points(2)
//! .max_zoom(16)
//! .coordinate_system(CoordinateSystem::LatLng)
//! .build();
//!
//! // Create a new instance with the specified configuration settings
//! let mut cluster = Supercluster::new(options);
//!
//! // Create a a list of features
//! let features = Supercluster::feature_builder()
//! .add_point(vec![0.0, 0.0])
//! .build();
//!
//! // Load a list of features into the supercluster
//! let index = cluster.load(features)?;
//!
//! if let Err(err) = index.get_tile(0, 0.0, 0.0) {
//! println!("Error: {}", err);
//! }
//!
//! Ok(())
//! }
//! ```
//!
//! ## Benchmarks
//!
//! We use the `criterion` crate to benchmark the performance of the `supercluster` crate.
//!
//! Benchmarks help us understand the performance characteristics of supercluster and identify areas for optimization.
//!
//! We have several benchmark scenarios to test different aspects of supercluster:
//!
//! - **Getting a Tile**: Tests the performance of retrieving a tile from the `Supercluster`.
//! - **Getting Clusters**: Tests the performance of retrieving clusters for a given bounding box and zoom level.
//! - **Loading a Feature Collection**: Tests the performance of loading a `FeatureCollection` into the `Supercluster`.
//!
//! For more detailed benchmark scenarios, please refer to the [`benches`](https://github.com/chargetrip/supercluster-rs/tree/main/benches) directory in the repository.
//!
//! ## Safety
//!
//! This crate uses `#![forbid(unsafe_code)]` to ensure everything is implemented in 100% safe Rust.
//!
//! ## Contributing
//!
//! 🎈 Thanks for your help improving the project! We are so happy to have you!
//!
//! We have a [contributing guide](https://github.com/chargetrip/supercluster-rs/blob/main/CONTRIBUTING.md) to help you get involved in the project.
//!
//! ## Sponsors
//!
//! <a href="https://www.chargetrip.com" target="_blank">
//! <img src="https://dka575ofm4ao0.cloudfront.net/pages-transactional_logos/retina/149188/Chargetrip_Combined_-_Black.png" width="240" alt="Chargetrip">
//! </a>
/// Supercluster builder module.
/// This module contains the builder pattern for the supercluster configuration settings.
/// Supercluster error module.
/// This module contains the error types for the supercluster crate.
/// KDBush module.
/// This module contains the KDBush implementation for the supercluster crate.
/// Range module.
/// This module contains the range implementation for the supercluster crate.
/// Supercluster module.
/// This module contains the supercluster implementation for the supercluster crate.
pub use *;
pub use *;
pub use *;
pub use *;
pub use *;