GEOS 3.6.2
SIRtree.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2006 Refractions Research Inc.
7 *
8 * This is free software; you can redistribute and/or modify it under
9 * the terms of the GNU Lesser General Public Licence as published
10 * by the Free Software Foundation.
11 * See the COPYING file for more information.
12 *
13 **********************************************************************/
14
15#ifndef GEOS_INDEX_STRTREE_SIRTREE_H
16#define GEOS_INDEX_STRTREE_SIRTREE_H
17
18#include <geos/export.h>
19
20#include <geos/index/strtree/AbstractSTRtree.h> // for inheritance
21#include <geos/index/strtree/Interval.h> // for inline
22
23#include <vector>
24#include <memory>
25
26namespace geos {
27namespace index { // geos::index
28namespace strtree { // geos::index::strtree
29
41class GEOS_DLL SIRtree: public AbstractSTRtree {
44
45public:
46
51
56 SIRtree(std::size_t nodeCapacity);
57
58 virtual ~SIRtree();
59
60 void insert(double x1, double x2, void* item);
61
66 std::vector<void*>* query(double x1, double x2)
67 {
68 std::vector<void*>* results = new std::vector<void*>();
69 Interval interval(std::min(x1, x2), std::max(x1, x2));
70 AbstractSTRtree::query(&interval, *results);
71 return results;
72 }
73
77 std::vector<void*>* query(double x) { return query(x,x); }
78
79
80protected:
81
82 class SIRIntersectsOp:public AbstractSTRtree::IntersectsOp {
83 public:
84 bool intersects(const void* aBounds, const void* bBounds);
85 };
86
91 std::auto_ptr<BoundableList> createParentBoundables(
92 BoundableList* childBoundables, int newLevel);
93
94 AbstractNode* createNode(int level);
95
96 IntersectsOp* getIntersectsOp() {return intersectsOp;}
97
98 std::auto_ptr<BoundableList> sortBoundables(const BoundableList* input);
99
100private:
101
102 IntersectsOp* intersectsOp;
103};
104
105
106} // namespace geos::index::strtree
107} // namespace geos::index
108} // namespace geos
109
110#endif // GEOS_INDEX_STRTREE_SIRTREE_H
A node of the STR tree.
Definition AbstractNode.h:42
A test for intersection between two bounds, necessary because subclasses of AbstractSTRtree have diff...
Definition AbstractSTRtree.h:166
virtual void insert(const void *bounds, void *item)
Also builds the tree, if necessary.
AbstractSTRtree(std::size_t newNodeCapacity)
Definition AbstractSTRtree.h:250
void query(const void *searchBounds, std::vector< void * > &foundItems)
Also builds the tree, if necessary.
A contiguous portion of 1D-space. Used internally by SIRtree.
Definition strtree/Interval.h:28
SIRtree()
Constructs an SIRtree with the default node capacity.
std::auto_ptr< BoundableList > createParentBoundables(BoundableList *childBoundables, int newLevel)
Sorts the childBoundables then divides them into groups of size M, where M is the node capacity.
SIRtree(std::size_t nodeCapacity)
Constructs an SIRtree with the given maximum number of child nodes that a node may have.
std::vector< void * > * query(double x)
Definition SIRtree.h:77
std::vector< void * > * query(double x1, double x2)
Definition SIRtree.h:66
IntersectsOp * getIntersectsOp()
Definition SIRtree.h:96
Contains 2-D and 1-D versions of the Sort-Tile-Recursive (STR) tree, a query-only R-tree.
Definition SIRtreePointInRing.h:32
std::vector< Boundable * > BoundableList
A list of boundables. TODO: use a list.
Definition AbstractSTRtree.h:44
Provides classes for various kinds of spatial indexes.
Definition IndexedNestedRingTester.h:31
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:25