#include <SpatialIndex.h>
Classes | |
struct | Layer |
struct | QuadNode |
Public Member Functions | |
size_t | getMaxlevel () |
size_t | getBildLevel () |
SpatialIndex () | |
SpatialIndex (size_t maxlevel, size_t buildlevel=5) | |
uint32 | leafNumberById (uint64 ID) const |
uint64 | idByLeafNumber (uint32 n) const |
char * | nameByLeafNumber (uint32 n, char *name=0) const |
void | pointById (SpatialVector &vector, uint64 ID) const |
uint64 | idByPoint (SpatialVector &vector) const |
uint64 | idByPoint (const float64 &ra, const float64 &dec) const |
find a node by giving a ra,dec in degrees. | |
char * | nameByPoint (SpatialVector &vector, char *s=NULL) const |
find a node by giving a vector. | |
char * | nameByPoint (const float64 &ra, const float64 &dec, char *s=NULL) const |
find a node by giving a ra,dec in degrees. | |
uint64 | leafCount () const |
return number of leaf nodes | |
size_t | nVertices () const |
return number of vertices | |
float64 | area (uint64 ID) const |
The area in steradians for a given index ID. | |
float64 | area (const SpatialVector &v1, const SpatialVector &v2, const SpatialVector &v3) const |
The area in steradians for a given spatial triangle. | |
void | nodeVertex (const uint64 id, SpatialVector &v1, SpatialVector &v2, SpatialVector &v3) const |
return the actual vertex vectors | |
void | nodeVertex (const size_t idx, size_t &v1, size_t &v2, size_t &v3) const |
return index of vertices for a node | |
void | showVertices (ostream &out) const |
print all vertices to output stream | |
void | setMaxlevel (int level) |
set the maximum depth of the layer | |
Static Public Member Functions | |
static uint64 | idByName (const char *) |
NodeName conversion to integer ID. | |
static char * | nameById (uint64 ID, char *name=0) |
Private Types | |
typedef std::vector< QuadNode > | ValueVectorQuad |
typedef std::vector < SpatialVector > | ValueVectorSpvec |
Private Member Functions | |
uint64 | newNode (size_t v1, size_t v2, size_t v3, uint64 id, uint64 parent) |
void | makeNewLayer (size_t oldlayer) |
void | vMax (size_t *nodes, size_t *vertices) |
void | sortIndex () |
bool | isInside (const SpatialVector &v, const SpatialVector &v0, const SpatialVector &v1, const SpatialVector &v2) const |
Private Attributes | |
size_t | maxlevel_ |
size_t | buildlevel_ |
uint64 | leaves_ |
uint64 | storedleaves_ |
ValueVectorQuad | nodes_ |
std::vector< Layer > | layers_ |
ValueVectorSpvec | vertices_ |
uint64 | index_ |
Friends | |
class | SpatialEdge |
class | SpatialConvex |
class | RangeConvex |
class | SpatialDomain |
class | htmInterface |
The Spatial Index is a quad tree of spherical triangles. The tree is built in the following way: Start out with 8 triangles on the sphere using the 3 main circles to determine them. Then, every triangle can be decomposed into 4 new triangles by drawing main circles between midpoints of its edges:
. /\ . / \ . /____\ . /\ /\ . / \ / \ . /____\/____\
This is how the quad tree is built up to a certain level by decomposing every triangle again and again.
typedef std::vector<QuadNode> SpatialIndex::ValueVectorQuad [private] |
typedef std::vector<SpatialVector> SpatialIndex::ValueVectorSpvec [private] |
SpatialIndex::SpatialIndex | ( | ) | [inline] |
Constructor. Give the level of the index and optionally the level to build - i.e. the depth to keep in memory. if maxlevel - buildlevel > 0 , that many levels are generated on the fly each time the index is called.
SpatialIndex::SpatialIndex | ( | size_t | maxlevel, | |
size_t | buildlevel = 5 | |||
) |
References buildlevel_, index_, layers_, SpatialEdge::makeMidPoints(), makeNewLayer(), N, newNode(), nodes_, sortIndex(), vertices_, and vMax().
float64 SpatialIndex::area | ( | const SpatialVector & | v1, | |
const SpatialVector & | v2, | |||
const SpatialVector & | v3 | |||
) | const |
The area in steradians for a given spatial triangle.
References area().
size_t SpatialIndex::getBildLevel | ( | ) | [inline] |
size_t SpatialIndex::getMaxlevel | ( | ) | [inline] |
Return leaf id for a certain bitlist index. Same as the function above
References leafCount().
Referenced by nameByLeafNumber().
uint64 SpatialIndex::idByName | ( | const char * | name | ) | [static] |
find a node by giving a ra,dec in degrees.
References idByPoint().
uint64 SpatialIndex::idByPoint | ( | SpatialVector & | vector | ) | const |
find a node by giving a vector. The ID of the node is returned.
References buildlevel_, gEpsilon, HTMNAMEMAX, ICHILD, idByName(), isInside(), maxlevel_, N, nameById(), nodes_, SpatialVector::normalize(), pointById(), and V.
Referenced by idByPoint(), and nameByPoint().
bool SpatialIndex::isInside | ( | const SpatialVector & | v, | |
const SpatialVector & | v0, | |||
const SpatialVector & | v1, | |||
const SpatialVector & | v2 | |||
) | const [private] |
References gEpsilon.
Referenced by idByPoint().
uint64 SpatialIndex::leafCount | ( | ) | const [inline] |
return number of leaf nodes
References leaves_.
Referenced by idByLeafNumber(), and leafNumberById().
Return leaf number in bitlist for a certain ID. Since the ID here means the number computed from the name, this is simply returning ID -leafCount(). Bitlists only work until level 14.
References HTMMAXBIT, leafCount(), and maxlevel_.
void SpatialIndex::makeNewLayer | ( | size_t | oldlayer | ) | [private] |
char * SpatialIndex::nameById | ( | uint64 | ID, | |
char * | name = 0 | |||
) | [static] |
int32 conversion to a string (name of database). WARNING: if name is already allocated, a size of at least 17 is required. The conversion is done by directly calculating the name from a number. To calculate the name of a certain level, the mechanism is that the name is given by (of nodes in that level) + (id of node). So for example, for the first level, there are 8 nodes, and we get the names from numbers 8 through 15 giving S0,S1,S2,S3,N0,N1,N2,N3. The order is always ascending starting from S0000.. to N3333...
References IDHIGHBIT, IDHIGHBIT2, and IDSIZE.
Referenced by idByPoint(), nameByLeafNumber(), nameByPoint(), and pointById().
char * SpatialIndex::nameByLeafNumber | ( | uint32 | n, | |
char * | name = 0 | |||
) | const [inline] |
return name for a certain leaf index (to be used for name lookup from a bitlist). This function is simply shorthand for nameById(n + leafCount()).
References idByLeafNumber(), and nameById().
char * SpatialIndex::nameByPoint | ( | const float64 & | ra, | |
const float64 & | dec, | |||
char * | s = NULL | |||
) | const [inline] |
find a node by giving a ra,dec in degrees.
References idByPoint(), and nameById().
char * SpatialIndex::nameByPoint | ( | SpatialVector & | vector, | |
char * | s = NULL | |||
) | const [inline] |
find a node by giving a vector.
References idByPoint(), and nameById().
uint64 SpatialIndex::newNode | ( | size_t | v1, | |
size_t | v2, | |||
size_t | v3, | |||
uint64 | id, | |||
uint64 | parent | |||
) | [private] |
References ICHILD_, index_, IV_, IW_, and N.
Referenced by makeNewLayer(), and SpatialIndex().
void SpatialIndex::nodeVertex | ( | const size_t | idx, | |
size_t & | v1, | |||
size_t & | v2, | |||
size_t & | v3 | |||
) | const |
return index of vertices for a node
References nodes_.
void SpatialIndex::nodeVertex | ( | const uint64 | id, | |
SpatialVector & | v1, | |||
SpatialVector & | v2, | |||
SpatialVector & | v3 | |||
) | const |
return the actual vertex vectors
References buildlevel_, IOFFSET, maxlevel_, nodes_, SpatialVector::normalize(), storedleaves_, and vertices_.
Referenced by area(), and pointById().
size_t SpatialIndex::nVertices | ( | ) | const [inline] |
return number of vertices
References vertices_.
void SpatialIndex::pointById | ( | SpatialVector & | vector, | |
uint64 | ID | |||
) | const |
find the vector to the centroid of a triangle represented by the ID
References HTMNAMEMAX, nameById(), nodeVertex(), SpatialVector::x_, SpatialVector::y_, and SpatialVector::z_.
Referenced by idByPoint().
void SpatialIndex::setMaxlevel | ( | int | level | ) | [inline] |
set the maximum depth of the layer
References maxlevel_.
void SpatialIndex::showVertices | ( | ostream & | out | ) | const |
print all vertices to output stream
References vertices_.
void SpatialIndex::sortIndex | ( | ) | [private] |
References IOFFSET, N, nodes_, and ON.
Referenced by SpatialIndex().
void SpatialIndex::vMax | ( | size_t * | nodes, | |
size_t * | vertices | |||
) | [private] |
References buildlevel_, leaves_, maxlevel_, and storedleaves_.
Referenced by SpatialIndex().
friend class htmInterface [friend] |
friend class RangeConvex [friend] |
friend class SpatialConvex [friend] |
friend class SpatialDomain [friend] |
friend class SpatialEdge [friend] |
size_t SpatialIndex::buildlevel_ [private] |
Referenced by idByPoint(), nodeVertex(), SpatialIndex(), and vMax().
uint64 SpatialIndex::index_ [private] |
Referenced by makeNewLayer(), newNode(), and SpatialIndex().
std::vector<Layer> SpatialIndex::layers_ [private] |
Referenced by makeNewLayer(), and SpatialIndex().
uint64 SpatialIndex::leaves_ [private] |
Referenced by leafCount(), and vMax().
size_t SpatialIndex::maxlevel_ [private] |
Referenced by idByPoint(), leafNumberById(), nodeVertex(), setMaxlevel(), and vMax().
ValueVectorQuad SpatialIndex::nodes_ [private] |
Referenced by idByPoint(), nodeVertex(), sortIndex(), and SpatialIndex().
uint64 SpatialIndex::storedleaves_ [private] |
Referenced by nodeVertex(), and vMax().
ValueVectorSpvec SpatialIndex::vertices_ [private] |
Referenced by SpatialEdge::getMidPoint(), nodeVertex(), nVertices(), showVertices(), and SpatialIndex().