Class S2ShapeIndex.S2ClippedShape

java.lang.Object
com.google.common.geometry.S2ShapeIndex.Cell
com.google.common.geometry.S2ShapeIndex.S2ClippedShape
All Implemented Interfaces:
S2Iterator.Entry, Serializable
Enclosing class:
S2ShapeIndex

public abstract static class S2ShapeIndex.S2ClippedShape extends S2ShapeIndex.Cell
S2ClippedShape represents the part of a shape that intersects an S2Cell. It consists of the set of edge ids that intersect that cell, and a boolean indicating whether the center of the cell is inside the shape (for shapes that have an interior). Edges themselves are not clipped; we always use the original edges for intersection tests so that the results will be the same as the original shape.

Most of the index memory is consumed here, so we have several strategies to be as efficient as possible:

  • Since only the first clipped shape in a cell needs to store the cell ID, we have subclasses for both cases based on whether a cell ID was provided.
  • Since no edges, one edge, and one dense range of edges are very common cases, we have more efficient subclasses for those situations, in addition to the general purpose implementation.
See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    clipped(int i)
    For implementing the Cell interface, this class contains just 1 shape (itself.)
    abstract boolean
    Returns whether the center of the S2CellId is inside the shape, and always returns false for shapes that do not have an interior according to S2Shape.hasInterior().
    final boolean
    containsEdge(int edgeId)
    Returns whether the clipped shape contains the given edge id.
    abstract int
    edge(int i)
    Returns the ith edge ID of this clipped shape.
    abstract int
    Returns the number of edges that intersect the S2CellId.
    final int
    For implementing the Cell interface, this class contains just 1 shape (itself.)
    final S2Shape
    Returns the original shape this clipped shape was clipped from.

    Methods inherited from class S2ShapeIndex.Cell

    id

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • shape

      public final S2Shape shape()
      Returns the original shape this clipped shape was clipped from.
    • containsCenter

      public abstract boolean containsCenter()
      Returns whether the center of the S2CellId is inside the shape, and always returns false for shapes that do not have an interior according to S2Shape.hasInterior().
    • numEdges

      public abstract int numEdges()
      Returns the number of edges that intersect the S2CellId.
    • edge

      public abstract int edge(int i)
      Returns the ith edge ID of this clipped shape. Edges are sorted in increasing order of edge ID. The edge IDs may be passed to the corresponding shape's S2Shape.getEdge(int, com.google.common.geometry.S2Shape.MutableEdge) method.
      Parameters:
      i - must be at least 0 and less than numEdges()
    • containsEdge

      public final boolean containsEdge(int edgeId)
      Returns whether the clipped shape contains the given edge id.
    • numShapes

      public final int numShapes()
      For implementing the Cell interface, this class contains just 1 shape (itself.)
      Specified by:
      numShapes in class S2ShapeIndex.Cell
    • clipped

      public final S2ShapeIndex.S2ClippedShape clipped(int i)
      For implementing the Cell interface, this class contains just 1 shape (itself.)
      Specified by:
      clipped in class S2ShapeIndex.Cell
      Parameters:
      i - must be at least 0 and less than S2ShapeIndex.Cell.numShapes()