package com.revolsys.geometry.graph; import java.util.Collection; import java.util.List; import com.revolsys.geometry.index.quadtree.AbstractIdObjectPointQuadTree; import com.revolsys.geometry.model.BoundingBox; import com.revolsys.geometry.model.Point; import com.revolsys.geometry.model.impl.BoundingBoxDoubleXY; import com.revolsys.visitor.CreateListVisitor; public class NodeQuadTree<T> extends AbstractIdObjectPointQuadTree<Node<T>> { private final Graph<T> graph; public NodeQuadTree(final Graph<T> graph) { this.graph = graph; final Collection<Integer> ids = graph.getNodeIds(); add(ids); } @Override public BoundingBox getBoundingBox(final Node<T> node) { if (node == null) { return BoundingBox.empty(); } else { final double x = node.getX(); final double y = node.getY(); final BoundingBox envelope = new BoundingBoxDoubleXY(x, y, x, y); return envelope; } } @Override public Point getCoordinates(final Node<T> node) { return node; } @Override public int getId(final Node<T> object) { return object.getId(); } @Override public Node<T> getObject(final Integer id) { return this.graph.getNode(id); } @Override public List<Node<T>> getObjects(final List<Integer> ids) { return this.graph.getNodes(ids); } @Override public List<Node<T>> query(final BoundingBox envelope) { final CreateListVisitor<Node<T>> visitor = new CreateListVisitor<>(); forEach(envelope, visitor); return visitor.getList(); } }