|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.elasticsearch.common.lucene.spatial.prefix.tree.SpatialPrefixTree
public abstract class SpatialPrefixTree
A Spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. Each string corresponds to a spatial region. Implementations of this class should be thread-safe and immutable once initialized.
Field Summary | |
---|---|
protected com.spatial4j.core.context.SpatialContext |
ctx
|
protected int |
maxLevels
|
protected static Charset |
UTF8
|
Constructor Summary | |
---|---|
SpatialPrefixTree(com.spatial4j.core.context.SpatialContext ctx,
int maxLevels)
|
Method Summary | |
---|---|
abstract int |
getLevelForDistance(double dist)
Returns the level of the smallest grid size with a side length that is greater or equal to the provided distance. |
int |
getMaxLevelForPrecision(com.spatial4j.core.shape.Shape shape,
double precision)
See com.spatial4j.core.query.SpatialArgs#getDistPrecision() . |
int |
getMaxLevels()
|
abstract Node |
getNode(byte[] bytes,
int offset,
int len)
|
Node |
getNode(byte[] bytes,
int offset,
int len,
Node target)
|
protected Node |
getNode(com.spatial4j.core.shape.Point p,
int level)
|
abstract Node |
getNode(String token)
The cell for the specified token. |
List<Node> |
getNodes(com.spatial4j.core.shape.Shape shape,
int detailLevel,
boolean inclParents)
Gets the intersecting & including cells for the specified shape, without exceeding detail level. |
protected List<Node> |
getNodesAltPoint(com.spatial4j.core.shape.Point p,
int detailLevel,
boolean inclParents)
Subclasses might override getNodes(com.spatial4j.core.shape.Shape, int, boolean)
and check if the argument is a shape and if so, delegate
to this implementation, which calls getNode(com.spatial4j.core.shape.Point, int) and
then calls getNode(String) repeatedly if inclParents is true. |
com.spatial4j.core.context.SpatialContext |
getSpatialContext()
|
Node |
getWorldNode()
Returns the level 0 cell which encompasses all spatial data. |
static List<String> |
nodesToTokenStrings(Collection<Node> nodes)
Will add the trailing leaf byte for leaves. |
String |
toString()
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
protected static final Charset UTF8
protected final int maxLevels
protected final com.spatial4j.core.context.SpatialContext ctx
Constructor Detail |
---|
public SpatialPrefixTree(com.spatial4j.core.context.SpatialContext ctx, int maxLevels)
Method Detail |
---|
public com.spatial4j.core.context.SpatialContext getSpatialContext()
public int getMaxLevels()
public String toString()
toString
in class Object
public int getMaxLevelForPrecision(com.spatial4j.core.shape.Shape shape, double precision)
com.spatial4j.core.query.SpatialArgs#getDistPrecision()
.
A grid level looked up via getLevelForDistance(double)
is returned.
shape
- precision
- 0-0.5
public abstract int getLevelForDistance(double dist)
dist
- >= 0
public Node getWorldNode()
getNode(String)
with "".
This cell is threadsafe, just like a spatial prefix grid is, although cells aren't
generally threadsafe.
TODO rename to getTopCell or is this fine?
public abstract Node getNode(String token)
getWorldNode()
.
Precondition: Never called when token length > maxLevel.
public abstract Node getNode(byte[] bytes, int offset, int len)
public final Node getNode(byte[] bytes, int offset, int len, Node target)
protected Node getNode(com.spatial4j.core.shape.Point p, int level)
public List<Node> getNodes(com.spatial4j.core.shape.Shape shape, int detailLevel, boolean inclParents)
Node.getSubCell(com.spatial4j.core.shape.Point)
. Cell subclasses
ideally implement that method with a quick implementation, otherwise, subclasses should
override this method to invoke getNodesAltPoint(com.spatial4j.core.shape.Point, int, boolean)
.
TODO consider another approach returning an iterator -- won't build up all cells in memory.
protected final List<Node> getNodesAltPoint(com.spatial4j.core.shape.Point p, int detailLevel, boolean inclParents)
getNodes(com.spatial4j.core.shape.Shape, int, boolean)
and check if the argument is a shape and if so, delegate
to this implementation, which calls getNode(com.spatial4j.core.shape.Point, int)
and
then calls getNode(String)
repeatedly if inclParents is true.
public static List<String> nodesToTokenStrings(Collection<Node> nodes)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |