/** * Copyright 2009 Joe LaPenna */ package com.joelapenna.foursquared.maps; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.OverlayItem; import com.joelapenna.foursquare.types.Venue; import com.joelapenna.foursquare.util.VenueUtils; import com.joelapenna.foursquared.FoursquaredSettings; import android.graphics.drawable.Drawable; import android.util.Log; /** * @author Joe LaPenna (joe@joelapenna.com) */ public class VenueItemizedOverlay extends BaseGroupItemizedOverlay<Venue> { public static final String TAG = "VenueItemizedOverlay"; public static final boolean DEBUG = FoursquaredSettings.DEBUG; private boolean mPopulatedSpans = false; private SpanHolder mSpanHolder = new SpanHolder(); public VenueItemizedOverlay(Drawable defaultMarker) { super(defaultMarker); } @Override protected OverlayItem createItem(int i) { Venue venue = (Venue)group.get(i); if (DEBUG) Log.d(TAG, "creating venue overlayItem: " + venue.getName()); int lat = (int)(Double.parseDouble(venue.getGeolat()) * 1E6); int lng = (int)(Double.parseDouble(venue.getGeolong()) * 1E6); GeoPoint point = new GeoPoint(lat, lng); return new VenueOverlayItem(point, venue); } @Override public boolean onTap(GeoPoint p, MapView mapView) { if (DEBUG) Log.d(TAG, "onTap: " + p); mapView.getController().animateTo(p); return super.onTap(p, mapView); } @Override public int getLatSpanE6() { if (!mPopulatedSpans) { populateSpans(); } return mSpanHolder.latSpanE6; } @Override public int getLonSpanE6() { if (!mPopulatedSpans) { populateSpans(); } return mSpanHolder.lonSpanE6; } private void populateSpans() { int maxLat = 0; int minLat = 0; int maxLon = 0; int minLon = 0; for (int i = 0; i < group.size(); i++) { Venue venue = (Venue)group.get(i); if (VenueUtils.hasValidLocation(venue)) { int lat = (int)(Double.parseDouble(venue.getGeolat()) * 1E6); int lon = (int)(Double.parseDouble(venue.getGeolong()) * 1E6); // LatSpan if (lat > maxLat || maxLat == 0) { maxLat = lat; } if (lat < minLat || minLat == 0) { minLat = lat; } // LonSpan if (lon < minLon || minLon == 0) { minLon = lon; } if (lon > maxLon || maxLon == 0) { maxLon = lon; } } } mSpanHolder.latSpanE6 = maxLat - minLat; mSpanHolder.lonSpanE6 = maxLon - minLon; } public static class VenueOverlayItem extends OverlayItem { private Venue mVenue; public VenueOverlayItem(GeoPoint point, Venue venue) { super(point, venue.getName(), venue.getAddress()); mVenue = venue; } public Venue getVenue() { return mVenue; } } public static final class SpanHolder { int latSpanE6 = 0; int lonSpanE6 = 0; } }