17个稳定版本
1.0.17 | 2024年7月22日 |
---|---|
1.0.16 | 2024年2月6日 |
1.0.15 | 2023年12月7日 |
1.0.14 | 2023年11月27日 |
30 in 地理空间
120 个月下载
57KB
1K SLoC
Supercluster
一个用于地理空间点聚类的非常快速的Rust crate。
此crate受到Mapbox的supercluster JS包 和 博客文章 的启发。
参考实现
功能
-
load(points)
:加载一个FeatureCollection 对象。每个功能应该是一个Feature 对象。 -
get_clusters(bbox, zoom)
:对于给定的bbox
数组([west_lng, south_lat, east_lng, north_lat]
)和zoom
,返回一个包含聚簇和点的Feature 对象数组。 -
get_tile(z, x, y)
:对于给定的缩放和x/y坐标,返回一个FeatureCollection 对象。 -
get_children(cluster_id)
:返回一个聚簇的子聚簇(在下一个缩放级别),给定其id(来自功能属性的cluster_id
值)。 -
get_leaves(cluster_id, limit, offset)
:返回一个聚簇的所有点(给定其cluster_id
),支持分页。 -
get_cluster_expansion_zoom(cluster_id)
:根据集群的cluster_id
返回集群扩展到多个子集群的缩放级别(对于“点击缩放”功能很有用)。
选项
选项 | 描述 |
---|---|
min_zoom |
生成集群的最小缩放级别。 |
max_zoom |
生成集群的最大缩放级别。 |
min_points |
形成集群的最小点数。 |
radius |
集群半径,单位为像素。 |
extent |
(瓦片)瓦片范围。半径相对于此值计算。 |
node_size |
KD树的叶子节点大小。影响性能。 |
安全性
该crate使用#![forbid(unsafe_code)]
来确保所有内容都以100%安全的方式实现Rust。
文档
有关更详细的信息,请参阅完整的文档。
如果您在文档中遇到任何问题或有任何问题未得到解决,请随时提交问题。
用法
在您的项目目录中运行以下Cargo命令
cargo add supercluster
use geojson::FeatureCollection;
use supercluster::{ Supercluster, Options };
fn main() {
let options = Options {
max_zoom: 16,
min_zoom: 0,
min_points: 2,
radius: 40.0,
node_size: 64,
extent: 512.0,
};
// Create a new instance with the specified configuration settings
let mut cluster = Supercluster::new(options);
// Load a FeatureCollection Object into the Supercluster instance
// [GeoJSON Format Specification § 5](https://tools.ietf.org/html/rfc7946#section-5)
let feature_collection = FeatureCollection {
bbox: None,
// [GeoJSON Format Specification § 3.2](https://datatracker.ietf.org/doc/html/rfc7946#section-3.2)
features: vec![],
foreign_members: None,
};
let index = cluster.load(feature_collection);
// Retrieve a FeatureCollection Object within a tile at the given zoom level and tile coordinates
let tile = index.get_tile(0, 0.0, 0.0).expect("cannot get a tile");
...
}
贡献
构建
cargo build
测试
cargo test
运行clippy
cargo clippy --all-targets --all-features -- -D warnings
运行rustfmt
cargo fmt
以HTML格式生成文档
cargo doc --open
赞助商
依赖项
~1.6–2.6MB
~55K SLoC