# RTree **Repository Path**: lmliang/RTree ## Basic Information - **Project Name**: RTree - **Description**: R-Tree R*-Tree - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2015-11-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### R*-Tree的使用说明 1. 构建 构建R*-Tree时需要指定维度(dimension)、最小子节点数(m)、及最大子节点数(M)。 其中: 2 ≤ dimension; 2 ≤ m ≤ M/2; 示例: 构建2维,最小节点数为2,最大节点数为4,叶子数据类型为Int32的树. ``` RStarTree tree = new RStarTree(2, 2, 4); ``` 2. 插入 向树中插入叶子时,需要为叶子指定包围盒大小。包围盒大小由各维度范围构成的序列 指定,例如X维度的最小值为minX,最大值为maxX; Y维度的最小值为minY,最大值为maxY, 则包围盒序列为: [minX, maxX, minY, maxY] 示例: 插入值为5,X维度范围为[0, 10],Y维度范围为[15, 30]的叶子. ``` Double[] bound = {0, 10, 15, 30}; tree.Insert(5, bound); ``` 3. 查询 如果不指定范围,则查询并返回所有叶子; 如果指定范围,通过设定查询方式返回满足条件的叶子。 示例: 查询所有叶子: ``` Int32[] all = tree.Search(); ``` 指定查询范围:X维度范围为[5, 15],Y维度范围为[10, 25] ``` Double[] searchBound = {5, 15, 10, 25}; ``` 查询在范围内部或与范围相交的叶子: ``` Int32[] overlapped = tree.Search(searchBound, RTreeSearchMode.Overlapped); ``` 查询完全在范围内部的叶子: ``` Int32[] enclosed = tree.Search(searchBound, RTreeSearchMode.Enclosed); ``` 4. 删除 有两种删除方式: 删除指定叶子:只删除同指定叶子相同的节点 删除指定范围内叶子:所有完全包含在指定范围内部的叶子均被删除 示例: 删除指定叶子:删除值为5的叶子,如果指定删除重复项,则删除所有值为5的节点 ``` Int32 removedNum = tree.Remove(5, true); ``` 删除指定范围内叶子:删除X维度范围为[0, 30],Y维度范围为[15, 45]指定范围内的叶子 ``` Double[] removedBound = {0, 30, 15, 45}; Int32 removedNum = tree.Remove(removeBound); ```