diff options
author | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:28 +0000 |
---|---|---|
committer | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:28 +0000 |
commit | cde76aeb42240f7270bc6605c606ae07d2dc5a7d (patch) | |
tree | c3ebf1d7745224f524da31dbabc5d76b9ea75916 /src/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java |
Import Upstream version 0.4.0~beta1
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java b/src/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java new file mode 100644 index 00000000..6078c794 --- /dev/null +++ b/src/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java @@ -0,0 +1,99 @@ +package de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.rstar; +/* +This file is part of ELKI: +Environment for Developing KDD-Applications Supported by Index-Structures + +Copyright (C) 2011 +Ludwig-Maximilians-Universität München +Lehr- und Forschungseinheit für Datenbanksysteme +ELKI Development Team + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialDirectoryEntry; +import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialEntry; +import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.NonFlatRStarTree; +import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.bulk.BulkSplit; +import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.util.InsertionStrategy; +import de.lmu.ifi.dbs.elki.logging.Logging; +import de.lmu.ifi.dbs.elki.persistent.PageFile; +import de.lmu.ifi.dbs.elki.utilities.documentation.Description; +import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; +import de.lmu.ifi.dbs.elki.utilities.documentation.Title; + +/** + * RStarTree is a spatial index structure based on the concepts of the R*-Tree. + * Apart from organizing the objects it also provides several methods to search + * for certain object in the structure and ensures persistence. + * + * @author Elke Achtert + * + * @apiviz.has RStarTreeNode oneway - - contains + */ +@Title("R*-Tree") +@Description("Balanced index structure based on bounding rectangles.") +@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", title = "The R*-tree: an efficient and robust access method for points and rectangles", booktitle = "Proceedings of the 1990 ACM SIGMOD International Conference on Management of Data, Atlantic City, NJ, May 23-25, 1990", url = "http://dx.doi.org/10.1145/93597.98741") +public class RStarTree extends NonFlatRStarTree<RStarTreeNode, SpatialEntry> { + /** + * The logger for this class. + */ + private static final Logging logger = Logging.getLogger(RStarTree.class); + + /** + * Constructor. + * + * @param pagefile Page file + * @param bulkSplitter bulk load strategy + * @param insertionStrategy the strategy to find the insertion child + */ + public RStarTree(PageFile<RStarTreeNode> pagefile, BulkSplit bulkSplitter, InsertionStrategy insertionStrategy) { + super(pagefile, bulkSplitter, insertionStrategy); + } + + @Override + protected SpatialEntry createRootEntry() { + return new SpatialDirectoryEntry(0, null); + } + + @Override + protected SpatialEntry createNewDirectoryEntry(RStarTreeNode node) { + return new SpatialDirectoryEntry(node.getPageID(), node.computeMBR()); + } + + /** + * Creates a new leaf node with the specified capacity. + * + * @return a new leaf node + */ + @Override + protected RStarTreeNode createNewLeafNode() { + return new RStarTreeNode(leafCapacity, true); + } + + /** + * Creates a new directory node with the specified capacity. + * + * @return a new directory node + */ + @Override + protected RStarTreeNode createNewDirectoryNode() { + return new RStarTreeNode(dirCapacity, false); + } + + @Override + protected Logging getLogger() { + return logger; + } +}
\ No newline at end of file |