小编V. *_*ejo的帖子

如何在C++中使用Boost库的Rtree?

我被要求编写一个函数,该函数接受“LatLon”作为输入(LatLon 是一个具有 2 个双精度数的类:纬度和经度)并返回距离该位置最近的交叉点的 ID(int)。我得到的函数可以返回任何交叉点的位置,也可以返回两个位置之间的距离。由于“性能测试”,我的导师建议我将所有交叉点的位置存储在 R 树中(来自 boost 库),这样可以更快地找到最近的交叉点,而不是迭代所有交叉点。然而,我刚刚学习 R 树是如何工作的,并且在如何创建 R 树方面遇到了困难。

问题是我在网上看到了几个他们创建 R 树的例子,但真正让我困惑的是他们在其中一个构造函数中只使用了两个参数,而不是四个。例如,他们使用:

bgi::rtree< value_t, bgi::quadratic<16> > rtree_;

其中 value_t 是一对 box 和 unsigned int,另一个参数是大小,但是如果我尝试这样做:

bgi::rtree<点,bgi::quadratic<16>>交集RTree;

其中 point 是一对 unsigned int 和 LatLon,编译器抱怨我没有使用正确的构造函数,并且它应该有四个参数而不是两个。

我在网上阅读过,发现我应该使用这个构造函数:

rtree(parameters_type const &、indexable_getter const &、value_equal const &、allocator_type const &)

但是,我不明白每个参数的描述,所以我不知道如何使用这个构造函数。那么,您能帮我了解该怎么做吗?如果可能的话,您能给我一个简短的例子吗?非常感谢。

这是 LatLon 类。它是只读的,所以我无法修改它:

class LatLon{

public:
LatLon(){}
explicit LatLon(float lat_, float lon_) : m_lat(lat_),m_lon(lon_){}

double lat() const { return m_lat; }
double lon() const { return m_lon; }

private:
float m_lat = std::numeric_limits<float>::quiet_NaN(); …
Run Code Online (Sandbox Code Playgroud)

c++ database boost r-tree boost-geometry

2
推荐指数
1
解决办法
5408
查看次数

标签 统计

boost ×1

boost-geometry ×1

c++ ×1

database ×1

r-tree ×1