如何在Rust中根据R-Tree索引检查LineString



我有几个点和很多行字符串,我想找到行字符串&X米以内的点。但我找不到合适的板条箱。

例如,rstar机箱实现了一个R-树索引。但它只适用于一种类型:如果树是由(geo(点组成的,它就不能针对LineStrings运行方法(请参阅Rust Explorer中不编译的示例(。

有什么方法可以使用rstar或工作板条箱吗?

我看到的唯一方法是从LineString创建一个边界框并调用RTree::locate_in_envelope,然后手动计算点到LineString的距离。

/*
[dependencies]
geo = '0.23'
rstar = '0.9'
*/
use rstar::RTree;
use geo::geometry::{LineString, Point, Coordinate};
use geo::line_string;
fn main() {
let mut rt = RTree::bulk_load(vec![Point(Coordinate::from((0.1, 0.1))), Point(Coordinate::from((10.0, 10.0)))]);
let l = line_string![(x: 10.0, y: 0.0), (x: 10.0, y: 20.0)];
println!("{:?}", rt.nearest_neighbor(&l));
}

经过更多的研究,我发现了机箱spatial-join,但它已经两年没有维护了。它不使用最新的geo机箱进行编译。

研究它的实现,它使用了相同的R-Tree,所以可能需要一些工作,我可以重新实现它。

最新更新