Class S2EdgeQuery

java.lang.Object
com.google.common.geometry.S2EdgeQuery

@GwtCompatible public class S2EdgeQuery extends Object
S2EdgeQuery is used to find edges or shapes that are crossed by an edge. If you need to query many edges, it is more efficient to declare a single S2EdgeQuery object and reuse it so that temporary storage does not need to be reallocated each time.

Here is an example showing how to index a set of polylines, and then find the polylines that are crossed by a given edge AB:

void test(Collection polylines, S2Point a0, S2Point a1) {
S2ShapeIndex index = new S2ShapeIndex();
for (int i = 0; i invalid input: '<' polylines.size(); ++i) {
index.add(polylines[i]);
}
S2EdgeQuery query = new S2EdgeQuery(index);
Mapinvalid input: '<'S2Shape, Edges> results = query.getCrossings(a, b);
for (Map.Entryinvalid input: '<'S2Shape, Edges> entry : results.entrySet()) {
S2Polyline polyline = (S2Polyline) entry.getKey();
for (Edges edges = entry.getValue(); !edges.isEmpty(); ) {
int edge = edges.getNext();
S2Point b0 = polyline.vertex(edge);
S2Point b1 = polyline.vertex(edge + 1);
// Guaranteed that each resulting edge is either a crossing or a degenerate crossing.
assertTrue(S2EdgeUtil.robustCrossing(a0, a1, b0, b1) >= 0);
}
}
}

Note that if you need to query many edges, it is more efficient to declare a single S2EdgeQuery object and reuse it so that temporary storage does not need to be reallocated each time.

This class is not thread-safe.

  • Constructor Details

  • Method Details

    • getCrossings

      public S2EdgeQuery.Edges getCrossings(S2Point a, S2Point b, S2Shape shape)
      Returns edges from a given shape that either cross AB or share a vertex with AB.
    • getCrossings

      public Map<S2Shape, S2EdgeQuery.Edges> getCrossings(S2Point a, S2Point b)
      Returns edges for each shape that either crosses AB or shares a vertex with AB.
    • getCandidates

      public S2EdgeQuery.Edges getCandidates(S2Point a, S2Point b, S2Shape shape)
      Given a query edge AB and a shape shape, returns a superset of the edges of shape that intersect AB. Consider using S2EdgeQuery.ShapeEdges instead, if the shape has few enough edges.
    • getCandidates

      public Map<S2Shape, S2EdgeQuery.Edges> getCandidates(S2Point a, S2Point b)
      Given a query edge AB, returns a map from the indexed shapes to a superset of the edges for each shape that intersect AB. Consider using S2EdgeQuery.ShapeEdges instead, if there is just one indexed shape with few enough edges.

      CAVEAT: This method may return shapes that have an empty set of candidate edges, i.e. result.get(shape).isEmpty() == true.

    • getCells

      public boolean getCells(S2Point a, S2Point b, S2PaddedCell root, List<S2ShapeIndex.Cell> cells)
      Convenience method for calling getCells(S2Point, R2Vector, S2Point, R2Vector, S2PaddedCell, List).