关于C#:rtree是可索引的断言

rtree is indexable assertion

这是我的代码的一部分。我正在尝试为顶点类对象RTreeVertex创建一个rtree树。

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
class Entity {

public:
  int num;
public:
  Entity(int nr): num(nr){ }
  virtual ~Entity(){}
   bool operator==(const Entity& b)
   {
     return num == b.num;
   }
};


class Vertex : public Entity {

public :
  struct Coord{
  double X, Y, Z;  
  }Pos;

  Vertex(int num=0, double X=0., double Y=0., double Z=0.): Entity (num)
  {
    Pos.X = X;
    Pos.Y = Y;
    Pos.Z = Z;
  }
};

这是我声明rtree的方式:

1
2
3
#include <boost/geometry/index/rtree.hpp>
namespace bgi = boost::geometry::index;
bgi::rtree< Vertex, bgi::linear<32> > RTreeVertex;

但是我收到一条错误消息,指出vertec不可索引。

还有一个更普遍的问题:使用rtree来存储与网格相关的数据是一个好主意吗?


您必须将点类注册为Boost几何。它为您的班级创建了许多特征。我对此进行了测试,它可以正常工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    class Vertex : public Entity {

    public :
            double X, Y, Z;  

        Vertex(int num=0, double x=0., double y=0., double z=0.): Entity (num)
        {
            X = x;
            Y = y;
            Z = z;
        }
    };

BOOST_GEOMETRY_REGISTER_POINT_3D( Vertex, double, bg::cs::cartesian, X, X, X );
#include <boost/geometry/index/rtree.hpp>
namespace bgi = boost::geometry::index;
bgi::rtree< Vertex, bgi::linear<32> > RTreeVertex;

我无法在Pos :: X ...的结构中将其与X,Y,Z一起使用,也许有办法。您可以加入boost.org上的几何组。他们是几何专家。

附录:
我很好奇,所以我看了一下REGISTER ..的工作原理。使用:

1
BOOST_GEOMETRY_REGISTER_POINT_3D( Vertex, double, bg::cs::cartesian, Pos.X, Pos.Y, Pos.Z );

您可以将结构用于x,y,z。

和命名空间bg = boost :: geometry;

是我上面使用的命名空间