// Created by plusminus on 23:18:23 - 02.10.2008 package org.androad.osm.views.overlay; import java.util.ArrayList; import java.util.List; import org.osmdroid.views.MapView; import org.osmdroid.views.overlay.OverlayItem; import org.osmdroid.views.overlay.ItemizedOverlayWithFocus; import org.osmdroid.DefaultResourceProxyImpl; import org.androad.sys.ors.adt.ts.ISpatialDataOrganizer; import android.content.Context; import android.graphics.Canvas; import android.graphics.Point; import android.graphics.drawable.Drawable; /** * @author Nicolas Gramlich * * @param <T> */ public class OSMMapViewSpacialIndexItemizedOverlayWithFocus<T extends OverlayItem> extends ItemizedOverlayWithFocus<T> { // =========================================================== // Constants // =========================================================== private static final int ITEM_LIMIT = 20; // =========================================================== // Fields // =========================================================== private ISpatialDataOrganizer<T> mSpatialDataOrganizer; private List<T> mClosestItems; // =========================================================== // Constructors // =========================================================== public OSMMapViewSpacialIndexItemizedOverlayWithFocus(final Context ctx, final ISpatialDataOrganizer<T> aManager, final Drawable pMarker, final Point pMarkerHotspot, final Drawable pMarkerFocusedBase, final Point pMarkerFocusedHotSpot, final int pFocusedBackgroundColor, final OnItemGestureListener<T> pOnItemTapListener) { super(new ArrayList<T>(), pMarker, pMarkerFocusedBase, pFocusedBackgroundColor, pOnItemTapListener, new DefaultResourceProxyImpl(ctx)); this.mSpatialDataOrganizer = aManager; } // =========================================================== // Getter & Setter // =========================================================== /** * @return may return null ! */ public List<T> getOverlayItems(){ return this.mClosestItems; } public void setOverlayItems(final List<T> pItems){ this.mSpatialDataOrganizer.clearIndex(); this.mSpatialDataOrganizer.addAll(pItems); this.mSpatialDataOrganizer.buildIndex(); } public void setSpacialIndexManager(final ISpatialDataOrganizer<T> pManager) { this.mSpatialDataOrganizer = pManager; } // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== @Override public void draw(final Canvas c, final MapView mapView, final boolean shadow) { if(this.mSpatialDataOrganizer.isIndexBuilt()){ switch(this.mSpatialDataOrganizer.getGetMode()){ case BOUNDINGBOX: this.mClosestItems = this.mSpatialDataOrganizer.getWithinBoundingBox(mapView.getBoundingBox(), ITEM_LIMIT); break; case CLOSEST: this.mClosestItems = this.mSpatialDataOrganizer.getClosest(mapView.getMapCenter(), ITEM_LIMIT); break; } super.draw(c, mapView, shadow); } } // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== }