package uk.me.parabola.util; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import uk.me.parabola.imgfmt.app.Area; import uk.me.parabola.imgfmt.app.Coord; import uk.me.parabola.mkgmap.reader.osm.Element; import uk.me.parabola.util.ElementQuadTreeNode.ElementQuadTreePolygon; public class ElementQuadTree { private final ElementQuadTreeNode root; public ElementQuadTree(Area bbox, Collection<Element> elements) { this.root = new ElementQuadTreeNode(bbox, elements); } public void remove(Element element) { root.remove(element); } public Set<Element> get(Area bbox) { return root.get(bbox, new HashSet<Element>()); } public Set<Element> get(java.awt.geom.Area polygon) { return root.get(new ElementQuadTreePolygon(polygon), new HashSet<Element>()); } public Set<Element> get(Collection<List<Coord>> polygons) { return root.get(new ElementQuadTreePolygon(polygons), new HashSet<Element>()); } public int getDepth() { return root.getDepth(); } public Set<Element> get(List<Coord> polygon) { if (polygon.size() < 3) { return new HashSet<Element>(); } if (polygon.get(0).equals(polygon.get(polygon.size() - 1)) == false) { return new HashSet<Element>(); } return root.get(new ElementQuadTreePolygon(polygon), new HashSet<Element>()); } public long getCoordSize() { return root.getSize(); } public boolean isEmpty() { return root.isEmpty(); } public void clear() { root.clear(); } }