// Created by plusminus on 12:17:26 AM - Apr 21, 2009 package org.androad.sys.ors.adt.ts; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.osmdroid.util.BoundingBoxE6; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.overlay.OverlayItem; import com.openmap.util.quadtree.QuadTree; public class ListBackedQuadTreeOrganizer<T extends OverlayItem> implements ISpatialDataOrganizer<T> { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final QuadTree<T> mQuadTree; protected final List<T> mFeatureList = new ArrayList<T>(); // =========================================================== // Constructors // =========================================================== public ListBackedQuadTreeOrganizer() { this.mQuadTree = new QuadTree<T>(); } public ListBackedQuadTreeOrganizer(final List<T> pItems) { this(); addAll(pItems); } // =========================================================== // Getter & Setter // =========================================================== @Override public boolean isIndexBuilt() { return true; } @Override public List<T> getItems() { return this.mFeatureList; } @Override public void add(final T pItem) { if(pItem != null){ this.mQuadTree.put(pItem.getPoint().getLatitudeE6(), pItem.getPoint().getLongitudeE6(), pItem); this.mFeatureList.add(pItem); } } @Override public void addAll(final Collection<T> pItems){ if(pItems != null) { for(final T item : pItems) { this.add(item); } } } // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== @Override public void clearIndex(){ this.mFeatureList.clear(); this.mQuadTree.clear(); } @Override public void buildIndex(){ /* Index is always built. */ } @Override public List<T> getClosest(final GeoPoint pGeoPoint, final int pCount){ throw new IllegalStateException("Wrong method!"); } @Override public List<T> getWithinBoundingBox(final BoundingBoxE6 pBoundingBoxE6, final int count) { final List<T> out = this.mQuadTree.get(pBoundingBoxE6.getLatNorthE6(), pBoundingBoxE6.getLonWestE6(), pBoundingBoxE6.getLatSouthE6(), pBoundingBoxE6.getLonEastE6()); // TODO respect count. return out; } @Override public GetMode getGetMode() { return GetMode.BOUNDINGBOX; } // =========================================================== // Inner and Anonymous Classes // =========================================================== }