GEOS
3.9.1dev
|
A query-only R-tree created using the Sort-Tile-Recursive (STR) algorithm. For two-dimensional spatial data. More...
#include <STRtree.h>
Classes | |
class | STRIntersectsOp |
Public Member Functions | |
~STRtree () override=default | |
STRtree (std::size_t nodeCapacity=10) | |
void | insert (const geom::Envelope *itemEnv, void *item) override |
Adds a spatial item with an extent specified by the given Envelope to the index. More... | |
void | query (const geom::Envelope *searchEnv, std::vector< void * > &matches) override |
Queries the index for all items whose extents intersect the given search Envelope. More... | |
void | query (const geom::Envelope *searchEnv, ItemVisitor &visitor) override |
Queries the index for all items whose extents intersect the given search Envelope and applies an ItemVisitor to them. More... | |
std::pair< const void *, const void * > | nearestNeighbour (ItemDistance *itemDist) |
const void * | nearestNeighbour (const geom::Envelope *env, const void *item, ItemDistance *itemDist) |
std::pair< const void *, const void * > | nearestNeighbour (STRtree *tree, ItemDistance *itemDist) |
std::pair< const void *, const void * > | nearestNeighbour (BoundablePair *initBndPair) |
std::pair< const void *, const void * > | nearestNeighbour (BoundablePair *initBndPair, double maxDistance) |
bool | remove (const geom::Envelope *itemEnv, void *item) override |
Removes a single item from the tree. More... | |
bool | isWithinDistance (STRtree *tree, ItemDistance *itemDist, double maxDistance) |
Public Member Functions inherited from geos::index::strtree::AbstractSTRtree | |
AbstractSTRtree (std::size_t newNodeCapacity) | |
Constructs an AbstractSTRtree with the specified maximum number of child nodes that a node may have. More... | |
virtual | ~AbstractSTRtree () |
virtual void | build () |
Creates parent nodes, grandparent nodes, and so forth up to the root node, for the data that has been inserted into the tree. More... | |
virtual std::size_t | getNodeCapacity () |
Returns the maximum number of child nodes that a node may have. More... | |
virtual void | query (const void *searchBounds, const AbstractNode *node, std::vector< void * > *matches) |
void | iterate (ItemVisitor &visitor) |
virtual void | boundablesAtLevel (int level, AbstractNode *top, BoundableList *boundables) |
ItemsList * | itemsTree () |
Gets a tree structure (as a nested list) corresponding to the structure of the items and nodes in this tree. More... | |
Public Member Functions inherited from geos::index::SpatialIndex | |
virtual | ~SpatialIndex () |
Static Public Member Functions | |
static double | avg (double a, double b) |
static double | centreY (const geom::Envelope *e) |
Protected Member Functions | |
AbstractNode * | createNode (int level) override |
IntersectsOp * | getIntersectsOp () override |
Protected Member Functions inherited from geos::index::strtree::AbstractSTRtree | |
virtual AbstractNode * | lastNode (BoundableList *nodeList) |
virtual AbstractNode * | getRoot () |
virtual void | insert (const void *bounds, void *item) |
Also builds the tree, if necessary. More... | |
void | query (const void *searchBounds, std::vector< void * > &foundItems) |
Also builds the tree, if necessary. More... | |
void | query (const void *searchBounds, ItemVisitor &visitor) |
Also builds the tree, if necessary. More... | |
void | query (const void *searchBounds, const AbstractNode &node, ItemVisitor &visitor) |
bool | remove (const void *itemEnv, void *item) |
Also builds the tree, if necessary. More... | |
std::unique_ptr< BoundableList > | boundablesAtLevel (int level) |
Private Member Functions | |
std::unique_ptr< BoundableList > | createParentBoundables (BoundableList *childBoundables, int newLevel) override |
std::unique_ptr< BoundableList > | createParentBoundablesFromVerticalSlices (std::vector< BoundableList * > *verticalSlices, int newLevel) |
std::unique_ptr< BoundableList > | sortBoundablesY (const BoundableList *input) |
std::unique_ptr< BoundableList > | sortBoundablesX (const BoundableList *input) |
std::unique_ptr< BoundableList > | createParentBoundablesFromVerticalSlice (BoundableList *childBoundables, int newLevel) |
std::vector< BoundableList * > * | verticalSlices (BoundableList *childBoundables, size_t sliceCount) |
bool | isWithinDistance (BoundablePair *initBndPair, double maxDistance) |
Private Attributes | |
STRIntersectsOp | intersectsOp |
Additional Inherited Members | |
Protected Attributes inherited from geos::index::strtree::AbstractSTRtree | |
AbstractNode * | root |
std::vector< AbstractNode * > * | nodes |
std::size_t | nodeCapacity |
A query-only R-tree created using the Sort-Tile-Recursive (STR) algorithm. For two-dimensional spatial data.
The STR packed R-tree is simple to implement and maximizes space utilization; that is, as many leaves as possible are filled to capacity. Overlap between nodes is far less than in a basic R-tree. However, once the tree has been built (explicitly or on the first call to query), items may not be added or removed.
Described in: P. Rigaux, Michel Scholl and Agnes Voisard. Spatial Databases With Application To GIS. Morgan Kaufmann, San Francisco, 2002.
|
overridedefault |
geos::index::strtree::STRtree::STRtree | ( | std::size_t | nodeCapacity = 10 | ) |
Constructs an STRtree with the given maximum number of child nodes that a node may have
|
inlinestatic |
|
inlinestatic |
Definition at line 137 of file STRtree.h.
References avg(), geos::geom::Envelope::getMaxY(), and geos::geom::Envelope::getMinY().
|
overrideprotectedvirtual |
Implements geos::index::strtree::AbstractSTRtree.
|
overrideprivatevirtual |
Creates the parent level for the given child level. First, orders the items by the x-values of the midpoints, and groups them into vertical slices. For each slice, orders the items by the y-values of the midpoints, and group them into runs of size M (the node capacity). For each run, creates a new (parent) node.
Reimplemented from geos::index::strtree::AbstractSTRtree.
|
private |
|
private |
|
inlineoverrideprotectedvirtual |
Implements geos::index::strtree::AbstractSTRtree.
|
overridevirtual |
Adds a spatial item with an extent specified by the given Envelope to the index.
itemEnv | Envelope of the item, ownership left to caller. TODO: Reference hold by this class ? |
item | Opaque item, ownership left to caller. Reference hold by this class. |
Implements geos::index::SpatialIndex.
|
private |
bool geos::index::strtree::STRtree::isWithinDistance | ( | STRtree * | tree, |
ItemDistance * | itemDist, | ||
double | maxDistance | ||
) |
std::pair<const void*, const void*> geos::index::strtree::STRtree::nearestNeighbour | ( | ItemDistance * | itemDist | ) |
const void* geos::index::strtree::STRtree::nearestNeighbour | ( | const geom::Envelope * | env, |
const void * | item, | ||
ItemDistance * | itemDist | ||
) |
std::pair<const void*, const void*> geos::index::strtree::STRtree::nearestNeighbour | ( | STRtree * | tree, |
ItemDistance * | itemDist | ||
) |
std::pair<const void*, const void*> geos::index::strtree::STRtree::nearestNeighbour | ( | BoundablePair * | initBndPair | ) |
std::pair<const void*, const void*> geos::index::strtree::STRtree::nearestNeighbour | ( | BoundablePair * | initBndPair, |
double | maxDistance | ||
) |
|
inlineoverridevirtual |
Queries the index for all items whose extents intersect the given search Envelope.
Note that some kinds of indexes may also return objects which do not in fact intersect the query envelope.
searchEnv | the envelope to query for |
Implements geos::index::SpatialIndex.
Definition at line 143 of file STRtree.h.
References geos::index::strtree::AbstractSTRtree::query().
|
inlineoverridevirtual |
Queries the index for all items whose extents intersect the given search Envelope and applies an ItemVisitor to them.
Note that some kinds of indexes may also return objects which do not in fact intersect the query envelope.
searchEnv | the envelope to query for |
visitor | a visitor object to apply to the items found |
Implements geos::index::SpatialIndex.
Definition at line 149 of file STRtree.h.
References geos::index::strtree::AbstractSTRtree::query().
|
inlineoverridevirtual |
Removes a single item from the tree.
itemEnv | the Envelope of the item to remove |
item | the item to remove |
true
if the item was found Implements geos::index::SpatialIndex.
Definition at line 161 of file STRtree.h.
References geos::index::strtree::AbstractSTRtree::remove().
|
private |
|
private |
|
private |
childBoundables | Must be sorted by the x-value of the envelope midpoints |
|
private |