org.apache.lucene.spatial.prefix.tree

## Interface Cell

All Known Subinterfaces:
  CellCanPrune

All Known Implementing Classes:
  LegacyCell, NumberRangePrefixTree.NRCell, PackedQuadPrefixTree.PackedQuadCell, QuadPrefixTree.QuadCell

    public interface Cell

Represents a grid cell. Cell instances are generally very transient and may be re-used internally. To get an instance, you could start with `SpatialPrefixTree.getWorldCell()`. And from there you could either traverse down the tree with `getNextLevelCells(org.locationtech.spatial4j.shape.Shape)`, or you could read an indexed term via `SpatialPrefixTree.readCell(org.apache.lucene.util.BytesRef,Cell)`. When a cell is read from a term, it is comprised of just the base bytes plus optionally a leaf flag.

WARNING: This API is experimental and might change in incompatible ways in the next release.

### Method Summary

All Methods Instance Methods Abstract Methods
`int` `compareToNoLeaf(Cell fromCell)` Equivalent to `this.getTokenBytesNoLeaf(null).compareTo(fromCell.getTokenBytesNoLeaf(null))`.
`int` `getLevel()` Level 0 is the world (and has no parent), from then on a higher level means a smaller cell than the level before it.
`CellIterator` `getNextLevelCells(org.locationtech.spatial4j.shape.Shape shapeFilter)` Gets the cells at the next grid cell level underneath this one, optionally filtered by `shapeFilter`.
`org.locationtech.spatial4j.shape.Shape` `getShape()` Gets the shape for this cell; typically a Rectangle.
`org.locationtech.spatial4j.shape.SpatialRelation` `getShapeRel()` Gets the relationship this cell has with the shape from which it was filtered from, assuming it came from a `CellIterator`.
`BytesRef` `getTokenBytesNoLeaf(BytesRef result)` Returns the bytes for this cell, without a leaf set.
`BytesRef` `getTokenBytesWithLeaf(BytesRef result)` Returns the bytes for this cell, with a leaf byte if this is a leaf cell.
`boolean` `isLeaf()` Some cells are flagged as leaves, which are indexed as such.
`boolean` `isPrefixOf(Cell c)` Returns if the target term is within/underneath this cell; not necessarily a direct descendant.
`void` `setLeaf()` Set this cell to be a leaf.
`void` `setShapeRel(org.locationtech.spatial4j.shape.SpatialRelation rel)` See `getShapeRel()`.

### Method Detail

#### getShapeRel

    org.locationtech.spatial4j.shape.SpatialRelation getShapeRel()

Gets the relationship this cell has with the shape from which it was filtered from, assuming it came from a `CellIterator`. Arguably it belongs there but it's very convenient here.

#### setShapeRel

    void setShapeRel(org.locationtech.spatial4j.shape.SpatialRelation rel)

See `getShapeRel()`.

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

#### isLeaf

    boolean isLeaf()

Some cells are flagged as leaves, which are indexed as such. A leaf cell is either within some shape or it both intersects and the cell is at an accuracy threshold such that no smaller cells for the shape will be represented.

#### setLeaf

    void setLeaf()

Set this cell to be a leaf. Warning: never call on a cell initialized to reference the same bytes from termsEnum, which should be treated as immutable. Note: not supported at level 0.

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

#### getTokenBytesWithLeaf

    BytesRef getTokenBytesWithLeaf(BytesRef result)

Returns the bytes for this cell, with a leaf byte if this is a leaf cell. The result param is used to save object allocation, though its bytes aren't used.

Parameters:
  `result` - where the result goes, or null to create new

#### getTokenBytesNoLeaf

    BytesRef getTokenBytesNoLeaf(BytesRef result)

Returns the bytes for this cell, without a leaf set. The bytes should sort before `getTokenBytesWithLeaf(org.apache.lucene.util.BytesRef)`. The result param is used to save object allocation, though its bytes aren't used.

Parameters:
  `result` - where the result goes, or null to create new

#### getLevel

    int getLevel()

Level 0 is the world (and has no parent), from then on a higher level means a smaller cell than the level before it.

#### getNextLevelCells

    CellIterator getNextLevelCells(org.locationtech.spatial4j.shape.Shape shapeFilter)

Gets the cells at the next grid cell level underneath this one, optionally filtered by `shapeFilter`. The returned cells should have `getShapeRel()` set to their relation with `shapeFilter`. In addition, for non-points `isLeaf()` must be true when that relation is WITHIN.

IMPORTANT: Cells returned from this iterator can be shared, as well as the bytes.

Precondition: Never called when getLevel() == maxLevel.

Parameters:
  `shapeFilter` - an optional filter for the returned cells.
Returns:
  A set of cells (no dups), sorted. Not Modifiable.

#### getShape

    org.locationtech.spatial4j.shape.Shape getShape()

Gets the shape for this cell; typically a Rectangle.

#### isPrefixOf

    boolean isPrefixOf(Cell c)

Returns if the target term is within/underneath this cell; not necessarily a direct descendant.

Parameters:
  `c` - the term

#### compareToNoLeaf

    int compareToNoLeaf(Cell fromCell)

Equivalent to `this.getTokenBytesNoLeaf(null).compareTo(fromCell.getTokenBytesNoLeaf(null))`.